<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/wait.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/wait.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX1dBSVRfSF8w"><span class="b">_LINUX_WAIT_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX1dBSVRfSF8w"><span class="b">_LINUX_WAIT_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> <span class="k">/*</span>
<a name="4" /><span class="Maybe">       4:</span> <span class="k"> * Linux wait queue related types and methods</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="k"> */</span>
<a name="6" /><span class="Maybe">       6:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">list</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="7" /><span class="Maybe">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">stddef</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="Maybe">       8:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">spinlock</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="9" /><span class="Maybe">       9:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">uapi</span><span class="f">/</span><span class="b">linux</span><span class="f">/</span><span class="b">wait</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="11" /><span class="Maybe">      11:</span> 
<a name="12" /><span class="Maybe">      12:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">__wait_queue</span> <span class="b">wait_queue_t</span><span class="f">;</span>
<a name="13" /><span class="Maybe">      13:</span> <span class="m">typedef</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">wait_queue_func_t</span><span class="f">)</span><span class="f">(</span><span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">unsigned</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">flags</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="14" /><span class="Maybe">      14:</span> <span class="m">int</span> <span class="b">default_wake_function</span><span class="f">(</span><span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">unsigned</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">flags</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="15" /><span class="Maybe">      15:</span> 
<a name="16" /><span class="Maybe">      16:</span> <span class="m">struct</span> <span class="b">__wait_queue</span> <span class="f">{</span>
<a name="17" /><span class="Maybe">      17:</span>     <span class="m">unsigned</span> <span class="m">int</span>        <span class="b">flags</span><span class="f">;</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_V1FfRkxBR19FWENMVVNJVkVfMA__"><span class="b">WQ_FLAG_EXCLUSIVE</span></a>    <span class="c">0x01</span>
<a name="19" /><span class="Maybe">      19:</span>     <span class="m">void</span>            <span class="f">*</span><span class="m">private</span><span class="f">;</span>
<a name="20" /><span class="Maybe">      20:</span>     <span class="b">wait_queue_func_t</span>    <span class="b">func</span><span class="f">;</span>
<a name="21" /><span class="Maybe">      21:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">task_list</span><span class="f">;</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="f">}</span><span class="f">;</span>
<a name="23" /><span class="Maybe">      23:</span> 
<a name="24" /><span class="Maybe">      24:</span> <span class="m">struct</span> <span class="b">wait_bit_key</span> <span class="f">{</span>
<a name="25" /><span class="Maybe">      25:</span>     <span class="m">void</span>            <span class="f">*</span><span class="b">flags</span><span class="f">;</span>
<a name="26" /><span class="Maybe">      26:</span>     <span class="m">int</span>            <span class="b">bit_nr</span><span class="f">;</span>
<a name="27" /><span class="Maybe">      27:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_V0FJVF9BVE9NSUNfVF9CSVRfTlJfMA__"><span class="b">WAIT_ATOMIC_T_BIT_NR</span></a>    <span class="f">-</span><span class="c">1</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">}</span><span class="f">;</span>
<a name="29" /><span class="Maybe">      29:</span> 
<a name="30" /><span class="Maybe">      30:</span> <span class="m">struct</span> <span class="b">wait_bit_queue</span> <span class="f">{</span>
<a name="31" /><span class="Maybe">      31:</span>     <span class="m">struct</span> <span class="b">wait_bit_key</span>    <span class="b">key</span><span class="f">;</span>
<a name="32" /><span class="Maybe">      32:</span>     <span class="b">wait_queue_t</span>        <span class="b">wait</span><span class="f">;</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="f">}</span><span class="f">;</span>
<a name="34" /><span class="Maybe">      34:</span> 
<a name="35" /><span class="Maybe">      35:</span> <span class="m">struct</span> <span class="b">__wait_queue_head</span> <span class="f">{</span>
<a name="36" /><span class="Maybe">      36:</span>     <span class="b">spinlock_t</span>        <span class="b">lock</span><span class="f">;</span>
<a name="37" /><span class="Maybe">      37:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">task_list</span><span class="f">;</span>
<a name="38" /><span class="Maybe">      38:</span> <span class="f">}</span><span class="f">;</span>
<a name="39" /><span class="Maybe">      39:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">__wait_queue_head</span> <span class="b">wait_queue_head_t</span><span class="f">;</span>
<a name="40" /><span class="Maybe">      40:</span> 
<a name="41" /><span class="Maybe">      41:</span> <span class="m">struct</span> <span class="b">task_struct</span><span class="f">;</span>
<a name="42" /><span class="Maybe">      42:</span> 
<a name="43" /><span class="Maybe">      43:</span> <span class="k">/*</span>
<a name="44" /><span class="Maybe">      44:</span> <span class="k"> * Macros for declaration and initialisaton of the datatypes</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="k"> */</span>
<a name="46" /><span class="Maybe">      46:</span> 
<a name="47" /><span class="Maybe">      47:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19XQUlUUVVFVUVfSU5JVElBTElaRVJfMA__"><span class="b">__WAITQUEUE_INITIALIZER</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">tsk</span><span class="f">)</span> <span class="f">{</span>                \
<a name="48" /><span class="Maybe">      48:</span>     <span class="f">.</span><span class="m">private</span>    <span class="f">=</span> <span class="b">tsk</span><span class="f">,</span>                        \
<a name="49" /><span class="Maybe">      49:</span>     <span class="f">.</span><span class="b">func</span>        <span class="f">=</span> <span class="b">default_wake_function</span><span class="f">,</span>            \
<a name="50" /><span class="Maybe">      50:</span>     <span class="f">.</span><span class="b">task_list</span>    <span class="f">=</span> <span class="f">{</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a> <span class="f">}</span> <span class="f">}</span>
<a name="51" /><span class="Maybe">      51:</span> 
<a name="52" /><span class="Maybe">      52:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVDTEFSRV9XQUlUUVVFVUVfMA__"><span class="b">DECLARE_WAITQUEUE</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">tsk</span><span class="f">)</span>                    \
<a name="53" /><span class="Maybe">      53:</span>     <span class="b">wait_queue_t</span> <span class="b">name</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X19XQUlUUVVFVUVfSU5JVElBTElaRVJfMA__"><span class="b">__WAITQUEUE_INITIALIZER</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">tsk</span><span class="f">)</span>
<a name="54" /><span class="Maybe">      54:</span> 
<a name="55" /><span class="Maybe">      55:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVJfMA__"><span class="b">__WAIT_QUEUE_HEAD_INITIALIZER</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> <span class="f">{</span>                \
<a name="56" /><span class="Maybe">      56:</span>     <span class="f">.</span><span class="b">lock</span>        <span class="f">=</span> <a href="cpu.c_macros_ref.html#_X19TUElOX0xPQ0tfVU5MT0NLRURfMA__"><span class="b">__SPIN_LOCK_UNLOCKED</span></a><span class="f">(</span><span class="b">name</span><span class="f">.</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span>        \
<a name="57" /><span class="Maybe">      57:</span>     <span class="f">.</span><span class="b">task_list</span>    <span class="f">=</span> <span class="f">{</span> <span class="f">&amp;</span><span class="f">(</span><span class="b">name</span><span class="f">)</span><span class="f">.</span><span class="b">task_list</span><span class="f">,</span> <span class="f">&amp;</span><span class="f">(</span><span class="b">name</span><span class="f">)</span><span class="f">.</span><span class="b">task_list</span> <span class="f">}</span> <span class="f">}</span>
<a name="58" /><span class="Maybe">      58:</span> 
<a name="59" /><span class="Maybe">      59:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVDTEFSRV9XQUlUX1FVRVVFX0hFQURfMA__"><span class="b">DECLARE_WAIT_QUEUE_HEAD</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> \
<a name="60" /><span class="Maybe">      60:</span>     <span class="b">wait_queue_head_t</span> <span class="b">name</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVJfMA__"><span class="b">__WAIT_QUEUE_HEAD_INITIALIZER</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span>
<a name="61" /><span class="Maybe">      61:</span> 
<a name="62" /><span class="Maybe">      62:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19XQUlUX0JJVF9LRVlfSU5JVElBTElaRVJfMA__"><span class="b">__WAIT_BIT_KEY_INITIALIZER</span></a><span class="f">(</span><span class="b">word</span><span class="f">,</span> <span class="b">bit</span><span class="f">)</span>                \
<a name="63" /><span class="Maybe">      63:</span>     <span class="f">{</span> <span class="f">.</span><span class="b">flags</span> <span class="f">=</span> <span class="b">word</span><span class="f">,</span> <span class="f">.</span><span class="b">bit_nr</span> <span class="f">=</span> <span class="b">bit</span><span class="f">,</span> <span class="f">}</span>
<a name="64" /><span class="Maybe">      64:</span> 
<a name="65" /><span class="Maybe">      65:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19XQUlUX0FUT01JQ19UX0tFWV9JTklUSUFMSVpFUl8w"><span class="b">__WAIT_ATOMIC_T_KEY_INITIALIZER</span></a><span class="f">(</span><span class="b">p</span><span class="f">)</span>                \
<a name="66" /><span class="Maybe">      66:</span>     <span class="f">{</span> <span class="f">.</span><span class="b">flags</span> <span class="f">=</span> <span class="b">p</span><span class="f">,</span> <span class="f">.</span><span class="b">bit_nr</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_V0FJVF9BVE9NSUNfVF9CSVRfTlJfMA__"><span class="b">WAIT_ATOMIC_T_BIT_NR</span></a><span class="f">,</span> <span class="f">}</span>
<a name="67" /><span class="Maybe">      67:</span> 
<a name="68" /><span class="Maybe">      68:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__init_waitqueue_head</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">,</span> <span class="m">struct</span> <span class="b">lock_class_key</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="69" /><span class="Maybe">      69:</span> 
<a name="70" /><span class="Maybe">      70:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_aW5pdF93YWl0cXVldWVfaGVhZF8w"><span class="b">init_waitqueue_head</span></a><span class="f">(</span><span class="b">q</span><span class="f">)</span>                \
<a name="71" /><span class="Maybe">      71:</span>     <span class="m">do</span> <span class="f">{</span>                        \
<a name="72" /><span class="Maybe">      72:</span>         <span class="m">static</span> <span class="m">struct</span> <span class="b">lock_class_key</span> <span class="b">__key</span><span class="f">;</span>    \
<a name="73" /><span class="Maybe">      73:</span>                             \
<a name="74" /><span class="Maybe">      74:</span>         <span class="b">__init_waitqueue_head</span><span class="f">(</span><span class="f">(</span><span class="b">q</span><span class="f">)</span><span class="f">,</span> <span class="f">#</span><span class="b">q</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">__key</span><span class="f">)</span><span class="f">;</span>    \
<a name="75" /><span class="Maybe">      75:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="76" /><span class="Maybe">      76:</span> 
<a name="77" /><span class="False">      77:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_LOCKDEP</span>
<a name="78" /><span class="False">      78:</span> <span class="f">#</span> <span class="n">define</span> <span class="b">__WAIT_QUEUE_HEAD_INIT_ONSTACK</span><span class="f">(</span><span class="b">name</span><span class="f">)</span> \
<a name="79" /><span class="False">      79:</span>     <span class="f">(</span><span class="f">{</span> <a href="cpu.c_macros_ref.html#_aW5pdF93YWl0cXVldWVfaGVhZF8w"><span class="b">init_waitqueue_head</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">name</span><span class="f">)</span><span class="f">;</span> <span class="b">name</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span>
<a name="80" /><span class="False">      80:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDS18w"><span class="b">DECLARE_WAIT_QUEUE_HEAD_ONSTACK</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> \
<a name="81" /><span class="False">      81:</span>     <span class="b">wait_queue_head_t</span> <span class="b">name</span> <span class="f">=</span> <span class="b">__WAIT_QUEUE_HEAD_INIT_ONSTACK</span><span class="f">(</span><span class="b">name</span><span class="f">)</span>
<a name="82" /><span class="Maybe">      82:</span> <span class="f">#</span><span class="n">else</span>
<a name="83" /><span class="Maybe">      83:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDS18w"><span class="b">DECLARE_WAIT_QUEUE_HEAD_ONSTACK</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_REVDTEFSRV9XQUlUX1FVRVVFX0hFQURfMA__"><span class="b">DECLARE_WAIT_QUEUE_HEAD</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span>
<a name="84" /><span class="Maybe">      84:</span> <span class="f">#</span><span class="n">endif</span>
<a name="85" /><span class="Maybe">      85:</span> 
<a name="86" /><span class="Maybe">      86:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">init_waitqueue_entry</span><span class="f">(</span><span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">p</span><span class="f">)</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="f">{</span>
<a name="88" /><span class="Maybe">      88:</span>     <span class="b">q</span><span class="f">-&gt;</span><span class="b">flags</span>    <span class="f">=</span> <span class="c">0</span><span class="f">;</span>
<a name="89" /><span class="Maybe">      89:</span>     <span class="b">q</span><span class="f">-&gt;</span><span class="m">private</span>    <span class="f">=</span> <span class="b">p</span><span class="f">;</span>
<a name="90" /><span class="Maybe">      90:</span>     <span class="b">q</span><span class="f">-&gt;</span><span class="b">func</span>        <span class="f">=</span> <span class="b">default_wake_function</span><span class="f">;</span>
<a name="91" /><span class="Maybe">      91:</span> <span class="f">}</span>
<a name="92" /><span class="Maybe">      92:</span> 
<a name="93" /><span class="Maybe">      93:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="94" /><span class="Maybe">      94:</span> <span class="b">init_waitqueue_func_entry</span><span class="f">(</span><span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_func_t</span> <span class="b">func</span><span class="f">)</span>
<a name="95" /><span class="Maybe">      95:</span> <span class="f">{</span>
<a name="96" /><span class="Maybe">      96:</span>     <span class="b">q</span><span class="f">-&gt;</span><span class="b">flags</span>    <span class="f">=</span> <span class="c">0</span><span class="f">;</span>
<a name="97" /><span class="Maybe">      97:</span>     <span class="b">q</span><span class="f">-&gt;</span><span class="m">private</span>    <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>
<a name="98" /><span class="Maybe">      98:</span>     <span class="b">q</span><span class="f">-&gt;</span><span class="b">func</span>        <span class="f">=</span> <span class="b">func</span><span class="f">;</span>
<a name="99" /><span class="Maybe">      99:</span> <span class="f">}</span>
<a name="100" /><span class="Maybe">     100:</span> 
<a name="101" /><span class="Maybe">     101:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">waitqueue_active</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">)</span>
<a name="102" /><span class="Maybe">     102:</span> <span class="f">{</span>
<a name="103" /><span class="Maybe">     103:</span>     <span class="m">return</span> <span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="f">&amp;</span><span class="b">q</span><span class="f">-&gt;</span><span class="b">task_list</span><span class="f">)</span><span class="f">;</span>
<a name="104" /><span class="Maybe">     104:</span> <span class="f">}</span>
<a name="105" /><span class="Maybe">     105:</span> 
<a name="106" /><span class="Maybe">     106:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">add_wait_queue</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="107" /><span class="Maybe">     107:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">add_wait_queue_exclusive</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="108" /><span class="Maybe">     108:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">remove_wait_queue</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="109" /><span class="Maybe">     109:</span> 
<a name="110" /><span class="Maybe">     110:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__add_wait_queue</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">head</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="m">new</span><span class="f">)</span>
<a name="111" /><span class="Maybe">     111:</span> <span class="f">{</span>
<a name="112" /><span class="Maybe">     112:</span>     <span class="b">list_add</span><span class="f">(</span><span class="f">&amp;</span><span class="m">new</span><span class="f">-&gt;</span><span class="b">task_list</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">head</span><span class="f">-&gt;</span><span class="b">task_list</span><span class="f">)</span><span class="f">;</span>
<a name="113" /><span class="Maybe">     113:</span> <span class="f">}</span>
<a name="114" /><span class="Maybe">     114:</span> 
<a name="115" /><span class="Maybe">     115:</span> <span class="k">/*</span>
<a name="116" /><span class="Maybe">     116:</span> <span class="k"> * Used for wake-one threads:</span>
<a name="117" /><span class="Maybe">     117:</span> <span class="k"> */</span>
<a name="118" /><span class="Maybe">     118:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="119" /><span class="Maybe">     119:</span> <span class="b">__add_wait_queue_exclusive</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">)</span>
<a name="120" /><span class="Maybe">     120:</span> <span class="f">{</span>
<a name="121" /><span class="Maybe">     121:</span>     <span class="b">wait</span><span class="f">-&gt;</span><span class="b">flags</span> <span class="f">|=</span> <a href="cpu.c_macros_ref.html#_V1FfRkxBR19FWENMVVNJVkVfMA__"><span class="b">WQ_FLAG_EXCLUSIVE</span></a><span class="f">;</span>
<a name="122" /><span class="Maybe">     122:</span>     <span class="b">__add_wait_queue</span><span class="f">(</span><span class="b">q</span><span class="f">,</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="123" /><span class="Maybe">     123:</span> <span class="f">}</span>
<a name="124" /><span class="Maybe">     124:</span> 
<a name="125" /><span class="Maybe">     125:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__add_wait_queue_tail</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">head</span><span class="f">,</span>
<a name="126" /><span class="Maybe">     126:</span>                      <span class="b">wait_queue_t</span> <span class="f">*</span><span class="m">new</span><span class="f">)</span>
<a name="127" /><span class="Maybe">     127:</span> <span class="f">{</span>
<a name="128" /><span class="Maybe">     128:</span>     <span class="b">list_add_tail</span><span class="f">(</span><span class="f">&amp;</span><span class="m">new</span><span class="f">-&gt;</span><span class="b">task_list</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">head</span><span class="f">-&gt;</span><span class="b">task_list</span><span class="f">)</span><span class="f">;</span>
<a name="129" /><span class="Maybe">     129:</span> <span class="f">}</span>
<a name="130" /><span class="Maybe">     130:</span> 
<a name="131" /><span class="Maybe">     131:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="132" /><span class="Maybe">     132:</span> <span class="b">__add_wait_queue_tail_exclusive</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">)</span>
<a name="133" /><span class="Maybe">     133:</span> <span class="f">{</span>
<a name="134" /><span class="Maybe">     134:</span>     <span class="b">wait</span><span class="f">-&gt;</span><span class="b">flags</span> <span class="f">|=</span> <a href="cpu.c_macros_ref.html#_V1FfRkxBR19FWENMVVNJVkVfMA__"><span class="b">WQ_FLAG_EXCLUSIVE</span></a><span class="f">;</span>
<a name="135" /><span class="Maybe">     135:</span>     <span class="b">__add_wait_queue_tail</span><span class="f">(</span><span class="b">q</span><span class="f">,</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="136" /><span class="Maybe">     136:</span> <span class="f">}</span>
<a name="137" /><span class="Maybe">     137:</span> 
<a name="138" /><span class="Maybe">     138:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="139" /><span class="Maybe">     139:</span> <span class="b">__remove_wait_queue</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">head</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">old</span><span class="f">)</span>
<a name="140" /><span class="Maybe">     140:</span> <span class="f">{</span>
<a name="141" /><span class="Maybe">     141:</span>     <span class="b">list_del</span><span class="f">(</span><span class="f">&amp;</span><span class="b">old</span><span class="f">-&gt;</span><span class="b">task_list</span><span class="f">)</span><span class="f">;</span>
<a name="142" /><span class="Maybe">     142:</span> <span class="f">}</span>
<a name="143" /><span class="Maybe">     143:</span> 
<a name="144" /><span class="Maybe">     144:</span> <span class="m">void</span> <span class="b">__wake_up</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">nr</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="145" /><span class="Maybe">     145:</span> <span class="m">void</span> <span class="b">__wake_up_locked_key</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">mode</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="146" /><span class="Maybe">     146:</span> <span class="m">void</span> <span class="b">__wake_up_sync_key</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">nr</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="147" /><span class="Maybe">     147:</span> <span class="m">void</span> <span class="b">__wake_up_locked</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">nr</span><span class="f">)</span><span class="f">;</span>
<a name="148" /><span class="Maybe">     148:</span> <span class="m">void</span> <span class="b">__wake_up_sync</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">nr</span><span class="f">)</span><span class="f">;</span>
<a name="149" /><span class="Maybe">     149:</span> <span class="m">void</span> <span class="b">__wake_up_bit</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span><span class="f">)</span><span class="f">;</span>
<a name="150" /><span class="Maybe">     150:</span> <span class="m">int</span> <span class="b">__wait_on_bit</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="f">,</span> <span class="m">struct</span> <span class="b">wait_bit_queue</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span><span class="f">)</span><span class="f">;</span>
<a name="151" /><span class="Maybe">     151:</span> <span class="m">int</span> <span class="b">__wait_on_bit_lock</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="f">,</span> <span class="m">struct</span> <span class="b">wait_bit_queue</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span><span class="f">)</span><span class="f">;</span>
<a name="152" /><span class="Maybe">     152:</span> <span class="m">void</span> <span class="b">wake_up_bit</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span><span class="f">)</span><span class="f">;</span>
<a name="153" /><span class="Maybe">     153:</span> <span class="m">void</span> <span class="b">wake_up_atomic_t</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="154" /><span class="Maybe">     154:</span> <span class="m">int</span> <span class="b">out_of_line_wait_on_bit</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span><span class="f">)</span><span class="f">;</span>
<a name="155" /><span class="Maybe">     155:</span> <span class="m">int</span> <span class="b">out_of_line_wait_on_bit_lock</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span><span class="f">)</span><span class="f">;</span>
<a name="156" /><span class="Maybe">     156:</span> <span class="m">int</span> <span class="b">out_of_line_wait_on_atomic_t</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span><span class="f">)</span><span class="f">;</span>
<a name="157" /><span class="Maybe">     157:</span> <span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">bit_waitqueue</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">,</span> <span class="m">int</span><span class="f">)</span><span class="f">;</span>
<a name="158" /><span class="Maybe">     158:</span> 
<a name="159" /><span class="Maybe">     159:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF8w"><span class="b">wake_up</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>            <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19OT1JNQUxfMA__"><span class="b">TASK_NORMAL</span></a><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="160" /><span class="Maybe">     160:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9ucl8w"><span class="b">wake_up_nr</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">nr</span><span class="f">)</span>        <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19OT1JNQUxfMA__"><span class="b">TASK_NORMAL</span></a><span class="f">,</span> <span class="b">nr</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9hbGxfMA__"><span class="b">wake_up_all</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>            <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19OT1JNQUxfMA__"><span class="b">TASK_NORMAL</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9sb2NrZWRfMA__"><span class="b">wake_up_locked</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>        <span class="b">__wake_up_locked</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19OT1JNQUxfMA__"><span class="b">TASK_NORMAL</span></a><span class="f">,</span> <span class="c">1</span><span class="f">)</span>
<a name="163" /><span class="Maybe">     163:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9hbGxfbG9ja2VkXzA_"><span class="b">wake_up_all_locked</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>        <span class="b">__wake_up_locked</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19OT1JNQUxfMA__"><span class="b">TASK_NORMAL</span></a><span class="f">,</span> <span class="c">0</span><span class="f">)</span>
<a name="164" /><span class="Maybe">     164:</span> 
<a name="165" /><span class="Maybe">     165:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9pbnRlcnJ1cHRpYmxlXzA_"><span class="b">wake_up_interruptible</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="166" /><span class="Maybe">     166:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yXzA_"><span class="b">wake_up_interruptible_nr</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">nr</span><span class="f">)</span>    <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="b">nr</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="167" /><span class="Maybe">     167:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbF8w"><span class="b">wake_up_interruptible_all</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="168" /><span class="Maybe">     168:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfMA__"><span class="b">wake_up_interruptible_sync</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">__wake_up_sync</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">1</span><span class="f">)</span>
<a name="169" /><span class="Maybe">     169:</span> 
<a name="170" /><span class="Maybe">     170:</span> <span class="k">/*</span>
<a name="171" /><span class="Maybe">     171:</span> <span class="k"> * Wakeup macros to be used to report events to the targets.</span>
<a name="172" /><span class="Maybe">     172:</span> <span class="k"> */</span>
<a name="173" /><span class="Maybe">     173:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9wb2xsXzA_"><span class="b">wake_up_poll</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">m</span><span class="f">)</span>                        \
<a name="174" /><span class="Maybe">     174:</span>     <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19OT1JNQUxfMA__"><span class="b">TASK_NORMAL</span></a><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span> <span class="f">(</span><span class="b">m</span><span class="f">)</span><span class="f">)</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9sb2NrZWRfcG9sbF8w"><span class="b">wake_up_locked_poll</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">m</span><span class="f">)</span>                    \
<a name="176" /><span class="Maybe">     176:</span>     <span class="b">__wake_up_locked_key</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19OT1JNQUxfMA__"><span class="b">TASK_NORMAL</span></a><span class="f">,</span> <span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span> <span class="f">(</span><span class="b">m</span><span class="f">)</span><span class="f">)</span>
<a name="177" /><span class="Maybe">     177:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGxfMA__"><span class="b">wake_up_interruptible_poll</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">m</span><span class="f">)</span>                \
<a name="178" /><span class="Maybe">     178:</span>     <span class="b">__wake_up</span><span class="f">(</span><span class="b">x</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span> <span class="f">(</span><span class="b">m</span><span class="f">)</span><span class="f">)</span>
<a name="179" /><span class="Maybe">     179:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbF8w"><span class="b">wake_up_interruptible_sync_poll</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">m</span><span class="f">)</span>                \
<a name="180" /><span class="Maybe">     180:</span>     <span class="b">__wake_up_sync_key</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span> <span class="f">(</span><span class="b">m</span><span class="f">)</span><span class="f">)</span>
<a name="181" /><span class="Maybe">     181:</span> 
<a name="182" /><span class="Maybe">     182:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19fd2FpdF9jb25kX3RpbWVvdXRfMA__"><span class="b">___wait_cond_timeout</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span>                    \
<a name="183" /><span class="Maybe">     183:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="184" /><span class="Maybe">     184:</span>     <span class="m">bool</span> <span class="b">__cond</span> <span class="f">=</span> <span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">;</span>                    \
<a name="185" /><span class="Maybe">     185:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">__cond</span> <span class="f">&amp;&amp;</span> <span class="f">!</span><span class="b">__ret</span><span class="f">)</span>                        \
<a name="186" /><span class="Maybe">     186:</span>         <span class="b">__ret</span> <span class="f">=</span> <span class="c">1</span><span class="f">;</span>                        \
<a name="187" /><span class="Maybe">     187:</span>     <span class="b">__cond</span> <span class="f">||</span> <span class="f">!</span><span class="b">__ret</span><span class="f">;</span>                        \
<a name="188" /><span class="Maybe">     188:</span> <span class="f">}</span><span class="f">)</span>
<a name="189" /><span class="Maybe">     189:</span> 
<a name="190" /><span class="Maybe">     190:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19fd2FpdF9pc19pbnRlcnJ1cHRpYmxlXzA_"><span class="b">___wait_is_interruptible</span></a><span class="f">(</span><span class="b">state</span><span class="f">)</span>                    \
<a name="191" /><span class="Maybe">     191:</span>     <span class="f">(</span><span class="f">!</span><span class="b">__builtin_constant_p</span><span class="f">(</span><span class="b">state</span><span class="f">)</span> <span class="f">||</span>                \
<a name="192" /><span class="Maybe">     192:</span>         <span class="b">state</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a> <span class="f">||</span> <span class="b">state</span> <span class="f">==</span> <a href="cpu.c_macros_noref.html#_VEFTS19LSUxMQUJMRV8w"><span class="b">TASK_KILLABLE</span></a><span class="f">)</span>    \
<a name="193" /><span class="Maybe">     193:</span> 
<a name="194" /><span class="Maybe">     194:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">state</span><span class="f">,</span> <span class="b">exclusive</span><span class="f">,</span> <span class="b">ret</span><span class="f">,</span> <span class="b">cmd</span><span class="f">)</span>    \
<a name="195" /><span class="Maybe">     195:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="196" /><span class="Maybe">     196:</span>     <span class="b">__label__</span> <span class="b">__out</span><span class="f">;</span>                        \
<a name="197" /><span class="Maybe">     197:</span>     <span class="b">wait_queue_t</span> <span class="b">__wait</span><span class="f">;</span>                        \
<a name="198" /><span class="Maybe">     198:</span>     <span class="m">long</span> <span class="b">__ret</span> <span class="f">=</span> <span class="b">ret</span><span class="f">;</span>                        \
<a name="199" /><span class="Maybe">     199:</span>                                     \
<a name="200" /><span class="Maybe">     200:</span>     <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="f">&amp;</span><span class="b">__wait</span><span class="f">.</span><span class="b">task_list</span><span class="f">)</span><span class="f">;</span>                \
<a name="201" /><span class="Maybe">     201:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">exclusive</span><span class="f">)</span>                            \
<a name="202" /><span class="Maybe">     202:</span>         <span class="b">__wait</span><span class="f">.</span><span class="b">flags</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_V1FfRkxBR19FWENMVVNJVkVfMA__"><span class="b">WQ_FLAG_EXCLUSIVE</span></a><span class="f">;</span>            \
<a name="203" /><span class="Maybe">     203:</span>     <span class="m">else</span>                                \
<a name="204" /><span class="Maybe">     204:</span>         <span class="b">__wait</span><span class="f">.</span><span class="b">flags</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                    \
<a name="205" /><span class="Maybe">     205:</span>                                     \
<a name="206" /><span class="Maybe">     206:</span>     <span class="m">for</span> <span class="f">(</span><span class="f">;</span><span class="f">;</span><span class="f">)</span> <span class="f">{</span>                            \
<a name="207" /><span class="Maybe">     207:</span>         <span class="m">long</span> <span class="b">__int</span> <span class="f">=</span> <span class="b">prepare_to_wait_event</span><span class="f">(</span><span class="f">&amp;</span><span class="b">wq</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">__wait</span><span class="f">,</span> <span class="b">state</span><span class="f">)</span><span class="f">;\
</span>                                    \
<a name="209" /><span class="Maybe">     209:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">condition</span><span class="f">)</span>                        \
<a name="210" /><span class="Maybe">     210:</span>             <span class="m">break</span><span class="f">;</span>                        \
<a name="211" /><span class="Maybe">     211:</span>                                     \
<a name="212" /><span class="Maybe">     212:</span>         <span class="m">if</span> <span class="f">(</span><a href="cpu.c_macros_noref.html#_X19fd2FpdF9pc19pbnRlcnJ1cHRpYmxlXzA_"><span class="b">___wait_is_interruptible</span></a><span class="f">(</span><span class="b">state</span><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="b">__int</span><span class="f">)</span> <span class="f">{</span>        \
<a name="213" /><span class="Maybe">     213:</span>             <span class="b">__ret</span> <span class="f">=</span> <span class="b">__int</span><span class="f">;</span>                    \
<a name="214" /><span class="Maybe">     214:</span>             <span class="m">if</span> <span class="f">(</span><span class="b">exclusive</span><span class="f">)</span> <span class="f">{</span>                \
<a name="215" /><span class="Maybe">     215:</span>                 <span class="b">abort_exclusive_wait</span><span class="f">(</span><span class="f">&amp;</span><span class="b">wq</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">__wait</span><span class="f">,</span>    \
<a name="216" /><span class="Maybe">     216:</span>                              <span class="b">state</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="217" /><span class="Maybe">     217:</span>                 <span class="m">goto</span> <span class="b">__out</span><span class="f">;</span>                \
<a name="218" /><span class="Maybe">     218:</span>             <span class="f">}</span>                        \
<a name="219" /><span class="Maybe">     219:</span>             <span class="m">break</span><span class="f">;</span>                        \
<a name="220" /><span class="Maybe">     220:</span>         <span class="f">}</span>                            \
<a name="221" /><span class="Maybe">     221:</span>                                     \
<a name="222" /><span class="Maybe">     222:</span>         <span class="b">cmd</span><span class="f">;</span>                            \
<a name="223" /><span class="Maybe">     223:</span>     <span class="f">}</span>                                \
<a name="224" /><span class="Maybe">     224:</span>     <span class="b">finish_wait</span><span class="f">(</span><span class="f">&amp;</span><span class="b">wq</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">__wait</span><span class="f">)</span><span class="f">;</span>                    \
<a name="225" /><span class="Maybe">     225:</span> <span class="b">__out</span><span class="f">:</span>    <span class="b">__ret</span><span class="f">;</span>                                \
<a name="226" /><span class="Maybe">     226:</span> <span class="f">}</span><span class="f">)</span>
<a name="227" /><span class="Maybe">     227:</span> 
<a name="228" /><span class="Maybe">     228:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50XzA_"><span class="b">__wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>                    \
<a name="229" /><span class="Maybe">     229:</span>     <span class="f">(</span><span class="m">void</span><span class="f">)</span><a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19VTklOVEVSUlVQVElCTEVfMA__"><span class="b">TASK_UNINTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span>    \
<a name="230" /><span class="Maybe">     230:</span>                 <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">)</span>
<a name="231" /><span class="Maybe">     231:</span> 
<a name="232" /><span class="Maybe">     232:</span> <span class="k">/**</span>
<a name="233" /><span class="Maybe">     233:</span> <span class="k"> * wait_event - sleep until a condition gets true</span>
<a name="234" /><span class="Maybe">     234:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="235" /><span class="Maybe">     235:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="236" /><span class="Maybe">     236:</span> <span class="k"> *</span>
<a name="237" /><span class="Maybe">     237:</span> <span class="k"> * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the</span>
<a name="238" /><span class="Maybe">     238:</span> <span class="k"> * @condition evaluates to true. The @condition is checked each time</span>
<a name="239" /><span class="Maybe">     239:</span> <span class="k"> * the waitqueue @wq is woken up.</span>
<a name="240" /><span class="Maybe">     240:</span> <span class="k"> *</span>
<a name="241" /><span class="Maybe">     241:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="242" /><span class="Maybe">     242:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="243" /><span class="Maybe">     243:</span> <span class="k"> */</span>
<a name="244" /><span class="Maybe">     244:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF8w"><span class="b">wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>                    \
<a name="245" /><span class="Maybe">     245:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="246" /><span class="Maybe">     246:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="247" /><span class="Maybe">     247:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="248" /><span class="Maybe">     248:</span>     <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50XzA_"><span class="b">__wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span><span class="f">;</span>                    \
<a name="249" /><span class="Maybe">     249:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="250" /><span class="Maybe">     250:</span> 
<a name="251" /><span class="Maybe">     251:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X3RpbWVvdXRfMA__"><span class="b">__wait_event_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span>            \
<a name="252" /><span class="Maybe">     252:</span>     <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_X19fd2FpdF9jb25kX3RpbWVvdXRfMA__"><span class="b">___wait_cond_timeout</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">,</span>        \
<a name="253" /><span class="Maybe">     253:</span>               <a href="cpu.c_macros_ref.html#_VEFTS19VTklOVEVSUlVQVElCTEVfMA__"><span class="b">TASK_UNINTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="b">timeout</span><span class="f">,</span>            \
<a name="254" /><span class="Maybe">     254:</span>               <span class="b">__ret</span> <span class="f">=</span> <span class="b">schedule_timeout</span><span class="f">(</span><span class="b">__ret</span><span class="f">)</span><span class="f">)</span>
<a name="255" /><span class="Maybe">     255:</span> 
<a name="256" /><span class="Maybe">     256:</span> <span class="k">/**</span>
<a name="257" /><span class="Maybe">     257:</span> <span class="k"> * wait_event_timeout - sleep until a condition gets true or a timeout elapses</span>
<a name="258" /><span class="Maybe">     258:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="259" /><span class="Maybe">     259:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="260" /><span class="Maybe">     260:</span> <span class="k"> * @timeout: timeout, in jiffies</span>
<a name="261" /><span class="Maybe">     261:</span> <span class="k"> *</span>
<a name="262" /><span class="Maybe">     262:</span> <span class="k"> * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the</span>
<a name="263" /><span class="Maybe">     263:</span> <span class="k"> * @condition evaluates to true. The @condition is checked each time</span>
<a name="264" /><span class="Maybe">     264:</span> <span class="k"> * the waitqueue @wq is woken up.</span>
<a name="265" /><span class="Maybe">     265:</span> <span class="k"> *</span>
<a name="266" /><span class="Maybe">     266:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="267" /><span class="Maybe">     267:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="268" /><span class="Maybe">     268:</span> <span class="k"> *</span>
<a name="269" /><span class="Maybe">     269:</span> <span class="k"> * The function returns 0 if the @timeout elapsed, or the remaining</span>
<a name="270" /><span class="Maybe">     270:</span> <span class="k"> * jiffies (at least 1) if the @condition evaluated to %true before</span>
<a name="271" /><span class="Maybe">     271:</span> <span class="k"> * the @timeout elapsed.</span>
<a name="272" /><span class="Maybe">     272:</span> <span class="k"> */</span>
<a name="273" /><span class="Maybe">     273:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF90aW1lb3V0XzA_"><span class="b">wait_event_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span>            \
<a name="274" /><span class="Maybe">     274:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="275" /><span class="Maybe">     275:</span>     <span class="m">long</span> <span class="b">__ret</span> <span class="f">=</span> <span class="b">timeout</span><span class="f">;</span>                        \
<a name="276" /><span class="Maybe">     276:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_noref.html#_X19fd2FpdF9jb25kX3RpbWVvdXRfMA__"><span class="b">___wait_cond_timeout</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                \
<a name="277" /><span class="Maybe">     277:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X3RpbWVvdXRfMA__"><span class="b">__wait_event_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span><span class="f">;</span>    \
<a name="278" /><span class="Maybe">     278:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="279" /><span class="Maybe">     279:</span> <span class="f">}</span><span class="f">)</span>
<a name="280" /><span class="Maybe">     280:</span> 
<a name="281" /><span class="Maybe">     281:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2NtZF8w"><span class="b">__wait_event_cmd</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">cmd1</span><span class="f">,</span> <span class="b">cmd2</span><span class="f">)</span>            \
<a name="282" /><span class="Maybe">     282:</span>     <span class="f">(</span><span class="m">void</span><span class="f">)</span><a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19VTklOVEVSUlVQVElCTEVfMA__"><span class="b">TASK_UNINTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span>    \
<a name="283" /><span class="Maybe">     283:</span>                 <span class="b">cmd1</span><span class="f">;</span> <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">;</span> <span class="b">cmd2</span><span class="f">)</span>
<a name="284" /><span class="Maybe">     284:</span> 
<a name="285" /><span class="Maybe">     285:</span> <span class="k">/**</span>
<a name="286" /><span class="Maybe">     286:</span> <span class="k"> * wait_event_cmd - sleep until a condition gets true</span>
<a name="287" /><span class="Maybe">     287:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="288" /><span class="Maybe">     288:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="289" /><span class="Maybe">     289:</span> <span class="k"> * cmd1: the command will be executed before sleep</span>
<a name="290" /><span class="Maybe">     290:</span> <span class="k"> * cmd2: the command will be executed after sleep</span>
<a name="291" /><span class="Maybe">     291:</span> <span class="k"> *</span>
<a name="292" /><span class="Maybe">     292:</span> <span class="k"> * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the</span>
<a name="293" /><span class="Maybe">     293:</span> <span class="k"> * @condition evaluates to true. The @condition is checked each time</span>
<a name="294" /><span class="Maybe">     294:</span> <span class="k"> * the waitqueue @wq is woken up.</span>
<a name="295" /><span class="Maybe">     295:</span> <span class="k"> *</span>
<a name="296" /><span class="Maybe">     296:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="297" /><span class="Maybe">     297:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="298" /><span class="Maybe">     298:</span> <span class="k"> */</span>
<a name="299" /><span class="Maybe">     299:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9jbWRfMA__"><span class="b">wait_event_cmd</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">cmd1</span><span class="f">,</span> <span class="b">cmd2</span><span class="f">)</span>            \
<a name="300" /><span class="Maybe">     300:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="301" /><span class="Maybe">     301:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="302" /><span class="Maybe">     302:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="303" /><span class="Maybe">     303:</span>     <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2NtZF8w"><span class="b">__wait_event_cmd</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">cmd1</span><span class="f">,</span> <span class="b">cmd2</span><span class="f">)</span><span class="f">;</span>            \
<a name="304" /><span class="Maybe">     304:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="305" /><span class="Maybe">     305:</span> 
<a name="306" /><span class="Maybe">     306:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfMA__"><span class="b">__wait_event_interruptible</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>            \
<a name="307" /><span class="Maybe">     307:</span>     <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span>        \
<a name="308" /><span class="Maybe">     308:</span>               <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">)</span>
<a name="309" /><span class="Maybe">     309:</span> 
<a name="310" /><span class="Maybe">     310:</span> <span class="k">/**</span>
<a name="311" /><span class="Maybe">     311:</span> <span class="k"> * wait_event_interruptible - sleep until a condition gets true</span>
<a name="312" /><span class="Maybe">     312:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="313" /><span class="Maybe">     313:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="314" /><span class="Maybe">     314:</span> <span class="k"> *</span>
<a name="315" /><span class="Maybe">     315:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="316" /><span class="Maybe">     316:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="317" /><span class="Maybe">     317:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="318" /><span class="Maybe">     318:</span> <span class="k"> *</span>
<a name="319" /><span class="Maybe">     319:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="320" /><span class="Maybe">     320:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="321" /><span class="Maybe">     321:</span> <span class="k"> *</span>
<a name="322" /><span class="Maybe">     322:</span> <span class="k"> * The function will return -ERESTARTSYS if it was interrupted by a</span>
<a name="323" /><span class="Maybe">     323:</span> <span class="k"> * signal and 0 if @condition evaluated to true.</span>
<a name="324" /><span class="Maybe">     324:</span> <span class="k"> */</span>
<a name="325" /><span class="Maybe">     325:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlXzA_"><span class="b">wait_event_interruptible</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>                \
<a name="326" /><span class="Maybe">     326:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="327" /><span class="Maybe">     327:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="328" /><span class="Maybe">     328:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                        \
<a name="329" /><span class="Maybe">     329:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfMA__"><span class="b">__wait_event_interruptible</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span><span class="f">;</span>    \
<a name="330" /><span class="Maybe">     330:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="331" /><span class="Maybe">     331:</span> <span class="f">}</span><span class="f">)</span>
<a name="332" /><span class="Maybe">     332:</span> 
<a name="333" /><span class="Maybe">     333:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dF8w"><span class="b">__wait_event_interruptible_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span>    \
<a name="334" /><span class="Maybe">     334:</span>     <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_X19fd2FpdF9jb25kX3RpbWVvdXRfMA__"><span class="b">___wait_cond_timeout</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">,</span>        \
<a name="335" /><span class="Maybe">     335:</span>               <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="b">timeout</span><span class="f">,</span>            \
<a name="336" /><span class="Maybe">     336:</span>               <span class="b">__ret</span> <span class="f">=</span> <span class="b">schedule_timeout</span><span class="f">(</span><span class="b">__ret</span><span class="f">)</span><span class="f">)</span>
<a name="337" /><span class="Maybe">     337:</span> 
<a name="338" /><span class="Maybe">     338:</span> <span class="k">/**</span>
<a name="339" /><span class="Maybe">     339:</span> <span class="k"> * wait_event_interruptible_timeout - sleep until a condition gets true or a timeout elapses</span>
<a name="340" /><span class="Maybe">     340:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="341" /><span class="Maybe">     341:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="342" /><span class="Maybe">     342:</span> <span class="k"> * @timeout: timeout, in jiffies</span>
<a name="343" /><span class="Maybe">     343:</span> <span class="k"> *</span>
<a name="344" /><span class="Maybe">     344:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="345" /><span class="Maybe">     345:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="346" /><span class="Maybe">     346:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="347" /><span class="Maybe">     347:</span> <span class="k"> *</span>
<a name="348" /><span class="Maybe">     348:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="349" /><span class="Maybe">     349:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="350" /><span class="Maybe">     350:</span> <span class="k"> *</span>
<a name="351" /><span class="Maybe">     351:</span> <span class="k"> * Returns:</span>
<a name="352" /><span class="Maybe">     352:</span> <span class="k"> * 0 if the @timeout elapsed, -%ERESTARTSYS if it was interrupted by</span>
<a name="353" /><span class="Maybe">     353:</span> <span class="k"> * a signal, or the remaining jiffies (at least 1) if the @condition</span>
<a name="354" /><span class="Maybe">     354:</span> <span class="k"> * evaluated to %true before the @timeout elapsed.</span>
<a name="355" /><span class="Maybe">     355:</span> <span class="k"> */</span>
<a name="356" /><span class="Maybe">     356:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfMA__"><span class="b">wait_event_interruptible_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span>    \
<a name="357" /><span class="Maybe">     357:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="358" /><span class="Maybe">     358:</span>     <span class="m">long</span> <span class="b">__ret</span> <span class="f">=</span> <span class="b">timeout</span><span class="f">;</span>                        \
<a name="359" /><span class="Maybe">     359:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_noref.html#_X19fd2FpdF9jb25kX3RpbWVvdXRfMA__"><span class="b">___wait_cond_timeout</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                \
<a name="360" /><span class="Maybe">     360:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dF8w"><span class="b">__wait_event_interruptible_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span>        \
<a name="361" /><span class="Maybe">     361:</span>                         <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span><span class="f">;</span>    \
<a name="362" /><span class="Maybe">     362:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="363" /><span class="Maybe">     363:</span> <span class="f">}</span><span class="f">)</span>
<a name="364" /><span class="Maybe">     364:</span> 
<a name="365" /><span class="Maybe">     365:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2hydGltZW91dF8w"><span class="b">__wait_event_hrtimeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">,</span> <span class="b">state</span><span class="f">)</span>        \
<a name="366" /><span class="Maybe">     366:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="367" /><span class="Maybe">     367:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="368" /><span class="Maybe">     368:</span>     <span class="m">struct</span> <span class="b">hrtimer_sleeper</span> <span class="b">__t</span><span class="f">;</span>                    \
<a name="369" /><span class="Maybe">     369:</span>                                     \
<a name="370" /><span class="Maybe">     370:</span>     <span class="b">hrtimer_init_on_stack</span><span class="f">(</span><span class="f">&amp;</span><span class="b">__t</span><span class="f">.</span><span class="b">timer</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_Q0xPQ0tfTU9OT1RPTklDXzA_"><span class="b">CLOCK_MONOTONIC</span></a><span class="f">,</span>        \
<a name="371" /><span class="Maybe">     371:</span>                   <span class="b">HRTIMER_MODE_REL</span><span class="f">)</span><span class="f">;</span>            \
<a name="372" /><span class="Maybe">     372:</span>     <span class="b">hrtimer_init_sleeper</span><span class="f">(</span><span class="f">&amp;</span><span class="b">__t</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">)</span><span class="f">;</span>                \
<a name="373" /><span class="Maybe">     373:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">(</span><span class="b">timeout</span><span class="f">)</span><span class="f">.</span><span class="b">tv64</span> <span class="f">!=</span> <a href="cpu.c_macros_ref.html#_S1RJTUVfTUFYXzA_"><span class="b">KTIME_MAX</span></a><span class="f">)</span>                \
<a name="374" /><span class="Maybe">     374:</span>         <span class="b">hrtimer_start_range_ns</span><span class="f">(</span><span class="f">&amp;</span><span class="b">__t</span><span class="f">.</span><span class="b">timer</span><span class="f">,</span> <span class="b">timeout</span><span class="f">,</span>        \
<a name="375" /><span class="Maybe">     375:</span>                        <a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">-&gt;</span><span class="b">timer_slack_ns</span><span class="f">,</span>        \
<a name="376" /><span class="Maybe">     376:</span>                        <span class="b">HRTIMER_MODE_REL</span><span class="f">)</span><span class="f">;</span>        \
<a name="377" /><span class="Maybe">     377:</span>                                     \
<a name="378" /><span class="Maybe">     378:</span>     <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">state</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span>        \
<a name="379" /><span class="Maybe">     379:</span>         <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">__t</span><span class="f">.</span><span class="b">task</span><span class="f">)</span> <span class="f">{</span>                    \
<a name="380" /><span class="Maybe">     380:</span>             <span class="b">__ret</span> <span class="f">=</span> <span class="f">-</span><a href="cpu.c_macros_noref.html#_RVRJTUVfMA__"><span class="b">ETIME</span></a><span class="f">;</span>                    \
<a name="381" /><span class="Maybe">     381:</span>             <span class="m">break</span><span class="f">;</span>                        \
<a name="382" /><span class="Maybe">     382:</span>         <span class="f">}</span>                            \
<a name="383" /><span class="Maybe">     383:</span>         <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>                        \
<a name="384" /><span class="Maybe">     384:</span>                                     \
<a name="385" /><span class="Maybe">     385:</span>     <span class="b">hrtimer_cancel</span><span class="f">(</span><span class="f">&amp;</span><span class="b">__t</span><span class="f">.</span><span class="b">timer</span><span class="f">)</span><span class="f">;</span>                    \
<a name="386" /><span class="Maybe">     386:</span>     <span class="b">destroy_hrtimer_on_stack</span><span class="f">(</span><span class="f">&amp;</span><span class="b">__t</span><span class="f">.</span><span class="b">timer</span><span class="f">)</span><span class="f">;</span>                \
<a name="387" /><span class="Maybe">     387:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="388" /><span class="Maybe">     388:</span> <span class="f">}</span><span class="f">)</span>
<a name="389" /><span class="Maybe">     389:</span> 
<a name="390" /><span class="Maybe">     390:</span> <span class="k">/**</span>
<a name="391" /><span class="Maybe">     391:</span> <span class="k"> * wait_event_hrtimeout - sleep until a condition gets true or a timeout elapses</span>
<a name="392" /><span class="Maybe">     392:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="393" /><span class="Maybe">     393:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="394" /><span class="Maybe">     394:</span> <span class="k"> * @timeout: timeout, as a ktime_t</span>
<a name="395" /><span class="Maybe">     395:</span> <span class="k"> *</span>
<a name="396" /><span class="Maybe">     396:</span> <span class="k"> * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the</span>
<a name="397" /><span class="Maybe">     397:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="398" /><span class="Maybe">     398:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="399" /><span class="Maybe">     399:</span> <span class="k"> *</span>
<a name="400" /><span class="Maybe">     400:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="401" /><span class="Maybe">     401:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="402" /><span class="Maybe">     402:</span> <span class="k"> *</span>
<a name="403" /><span class="Maybe">     403:</span> <span class="k"> * The function returns 0 if @condition became true, or -ETIME if the timeout</span>
<a name="404" /><span class="Maybe">     404:</span> <span class="k"> * elapsed.</span>
<a name="405" /><span class="Maybe">     405:</span> <span class="k"> */</span>
<a name="406" /><span class="Maybe">     406:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9ocnRpbWVvdXRfMA__"><span class="b">wait_event_hrtimeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span>            \
<a name="407" /><span class="Maybe">     407:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="408" /><span class="Maybe">     408:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="409" /><span class="Maybe">     409:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                        \
<a name="410" /><span class="Maybe">     410:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2hydGltZW91dF8w"><span class="b">__wait_event_hrtimeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">,</span>    \
<a name="411" /><span class="Maybe">     411:</span>                            <a href="cpu.c_macros_ref.html#_VEFTS19VTklOVEVSUlVQVElCTEVfMA__"><span class="b">TASK_UNINTERRUPTIBLE</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="412" /><span class="Maybe">     412:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="413" /><span class="Maybe">     413:</span> <span class="f">}</span><span class="f">)</span>
<a name="414" /><span class="Maybe">     414:</span> 
<a name="415" /><span class="Maybe">     415:</span> <span class="k">/**</span>
<a name="416" /><span class="Maybe">     416:</span> <span class="k"> * wait_event_interruptible_hrtimeout - sleep until a condition gets true or a timeout elapses</span>
<a name="417" /><span class="Maybe">     417:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="418" /><span class="Maybe">     418:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="419" /><span class="Maybe">     419:</span> <span class="k"> * @timeout: timeout, as a ktime_t</span>
<a name="420" /><span class="Maybe">     420:</span> <span class="k"> *</span>
<a name="421" /><span class="Maybe">     421:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="422" /><span class="Maybe">     422:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="423" /><span class="Maybe">     423:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="424" /><span class="Maybe">     424:</span> <span class="k"> *</span>
<a name="425" /><span class="Maybe">     425:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="426" /><span class="Maybe">     426:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="427" /><span class="Maybe">     427:</span> <span class="k"> *</span>
<a name="428" /><span class="Maybe">     428:</span> <span class="k"> * The function returns 0 if @condition became true, -ERESTARTSYS if it was</span>
<a name="429" /><span class="Maybe">     429:</span> <span class="k"> * interrupted by a signal, or -ETIME if the timeout elapsed.</span>
<a name="430" /><span class="Maybe">     430:</span> <span class="k"> */</span>
<a name="431" /><span class="Maybe">     431:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2hydGltZW91dF8w"><span class="b">wait_event_interruptible_hrtimeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span>    \
<a name="432" /><span class="Maybe">     432:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="433" /><span class="Maybe">     433:</span>     <span class="m">long</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="434" /><span class="Maybe">     434:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                        \
<a name="435" /><span class="Maybe">     435:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2hydGltZW91dF8w"><span class="b">__wait_event_hrtimeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">timeout</span><span class="f">,</span>    \
<a name="436" /><span class="Maybe">     436:</span>                            <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="437" /><span class="Maybe">     437:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="438" /><span class="Maybe">     438:</span> <span class="f">}</span><span class="f">)</span>
<a name="439" /><span class="Maybe">     439:</span> 
<a name="440" /><span class="Maybe">     440:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlXzA_"><span class="b">__wait_event_interruptible_exclusive</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>        \
<a name="441" /><span class="Maybe">     441:</span>     <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span>        \
<a name="442" /><span class="Maybe">     442:</span>               <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">)</span>
<a name="443" /><span class="Maybe">     443:</span> 
<a name="444" /><span class="Maybe">     444:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZV8w"><span class="b">wait_event_interruptible_exclusive</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>        \
<a name="445" /><span class="Maybe">     445:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="446" /><span class="Maybe">     446:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="447" /><span class="Maybe">     447:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                        \
<a name="448" /><span class="Maybe">     448:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlXzA_"><span class="b">__wait_event_interruptible_exclusive</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span><span class="f">;\
</span>    <span class="b">__ret</span><span class="f">;</span>                                \
<a name="450" /><span class="Maybe">     450:</span> <span class="f">}</span><span class="f">)</span>
<a name="451" /><span class="Maybe">     451:</span> 
<a name="452" /><span class="Maybe">     452:</span> 
<a name="453" /><span class="Maybe">     453:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkXzA_"><span class="b">__wait_event_interruptible_locked</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">exclusive</span><span class="f">,</span> <span class="b">irq</span><span class="f">)</span> \
<a name="454" /><span class="Maybe">     454:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="455" /><span class="Maybe">     455:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="456" /><span class="Maybe">     456:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1dBSVRfMA__"><span class="b">DEFINE_WAIT</span></a><span class="f">(</span><span class="b">__wait</span><span class="f">)</span><span class="f">;</span>                        \
<a name="457" /><span class="Maybe">     457:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">exclusive</span><span class="f">)</span>                            \
<a name="458" /><span class="Maybe">     458:</span>         <span class="b">__wait</span><span class="f">.</span><span class="b">flags</span> <span class="f">|=</span> <a href="cpu.c_macros_ref.html#_V1FfRkxBR19FWENMVVNJVkVfMA__"><span class="b">WQ_FLAG_EXCLUSIVE</span></a><span class="f">;</span>            \
<a name="459" /><span class="Maybe">     459:</span>     <span class="m">do</span> <span class="f">{</span>                                \
<a name="460" /><span class="Maybe">     460:</span>         <span class="m">if</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_bGlrZWx5XzA_"><span class="b">likely</span></a><span class="f">(</span><span class="b">list_empty</span><span class="f">(</span><span class="f">&amp;</span><span class="b">__wait</span><span class="f">.</span><span class="b">task_list</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>        \
<a name="461" /><span class="Maybe">     461:</span>             <span class="b">__add_wait_queue_tail</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">wq</span><span class="f">)</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">__wait</span><span class="f">)</span><span class="f">;</span>        \
<a name="462" /><span class="Maybe">     462:</span>         <a href="cpu.c_macros_noref.html#_c2V0X2N1cnJlbnRfc3RhdGVfMA__"><span class="b">set_current_state</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">)</span><span class="f">;</span>            \
<a name="463" /><span class="Maybe">     463:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">signal_pending</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                \
<a name="464" /><span class="Maybe">     464:</span>             <span class="b">__ret</span> <span class="f">=</span> <span class="f">-</span><a href="cpu.c_macros_noref.html#_RVJFU1RBUlRTWVNfMA__"><span class="b">ERESTARTSYS</span></a><span class="f">;</span>                \
<a name="465" /><span class="Maybe">     465:</span>             <span class="m">break</span><span class="f">;</span>                        \
<a name="466" /><span class="Maybe">     466:</span>         <span class="f">}</span>                            \
<a name="467" /><span class="Maybe">     467:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">irq</span><span class="f">)</span>                        \
<a name="468" /><span class="Maybe">     468:</span>             <span class="b">spin_unlock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">wq</span><span class="f">)</span><span class="f">.</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>            \
<a name="469" /><span class="Maybe">     469:</span>         <span class="m">else</span>                            \
<a name="470" /><span class="Maybe">     470:</span>             <span class="b">spin_unlock</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">wq</span><span class="f">)</span><span class="f">.</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>            \
<a name="471" /><span class="Maybe">     471:</span>         <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                        \
<a name="472" /><span class="Maybe">     472:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">irq</span><span class="f">)</span>                        \
<a name="473" /><span class="Maybe">     473:</span>             <span class="b">spin_lock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">wq</span><span class="f">)</span><span class="f">.</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>            \
<a name="474" /><span class="Maybe">     474:</span>         <span class="m">else</span>                            \
<a name="475" /><span class="Maybe">     475:</span>             <span class="b">spin_lock</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">wq</span><span class="f">)</span><span class="f">.</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>                \
<a name="476" /><span class="Maybe">     476:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>                        \
<a name="477" /><span class="Maybe">     477:</span>     <span class="b">__remove_wait_queue</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">wq</span><span class="f">)</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">__wait</span><span class="f">)</span><span class="f">;</span>                \
<a name="478" /><span class="Maybe">     478:</span>     <a href="cpu.c_macros_ref.html#_X19zZXRfY3VycmVudF9zdGF0ZV8w"><span class="b">__set_current_state</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_VEFTS19SVU5OSU5HXzA_"><span class="b">TASK_RUNNING</span></a><span class="f">)</span><span class="f">;</span>                \
<a name="479" /><span class="Maybe">     479:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="480" /><span class="Maybe">     480:</span> <span class="f">}</span><span class="f">)</span>
<a name="481" /><span class="Maybe">     481:</span> 
<a name="482" /><span class="Maybe">     482:</span> 
<a name="483" /><span class="Maybe">     483:</span> <span class="k">/**</span>
<a name="484" /><span class="Maybe">     484:</span> <span class="k"> * wait_event_interruptible_locked - sleep until a condition gets true</span>
<a name="485" /><span class="Maybe">     485:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="486" /><span class="Maybe">     486:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="487" /><span class="Maybe">     487:</span> <span class="k"> *</span>
<a name="488" /><span class="Maybe">     488:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="489" /><span class="Maybe">     489:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="490" /><span class="Maybe">     490:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="491" /><span class="Maybe">     491:</span> <span class="k"> *</span>
<a name="492" /><span class="Maybe">     492:</span> <span class="k"> * It must be called with wq.lock being held.  This spinlock is</span>
<a name="493" /><span class="Maybe">     493:</span> <span class="k"> * unlocked while sleeping but @condition testing is done while lock</span>
<a name="494" /><span class="Maybe">     494:</span> <span class="k"> * is held and when this macro exits the lock is held.</span>
<a name="495" /><span class="Maybe">     495:</span> <span class="k"> *</span>
<a name="496" /><span class="Maybe">     496:</span> <span class="k"> * The lock is locked/unlocked using spin_lock()/spin_unlock()</span>
<a name="497" /><span class="Maybe">     497:</span> <span class="k"> * functions which must match the way they are locked/unlocked outside</span>
<a name="498" /><span class="Maybe">     498:</span> <span class="k"> * of this macro.</span>
<a name="499" /><span class="Maybe">     499:</span> <span class="k"> *</span>
<a name="500" /><span class="Maybe">     500:</span> <span class="k"> * wake_up_locked() has to be called after changing any variable that could</span>
<a name="501" /><span class="Maybe">     501:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="502" /><span class="Maybe">     502:</span> <span class="k"> *</span>
<a name="503" /><span class="Maybe">     503:</span> <span class="k"> * The function will return -ERESTARTSYS if it was interrupted by a</span>
<a name="504" /><span class="Maybe">     504:</span> <span class="k"> * signal and 0 if @condition evaluated to true.</span>
<a name="505" /><span class="Maybe">     505:</span> <span class="k"> */</span>
<a name="506" /><span class="Maybe">     506:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tlZF8w"><span class="b">wait_event_interruptible_locked</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>            \
<a name="507" /><span class="Maybe">     507:</span>     <span class="f">(</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="508" /><span class="Maybe">     508:</span>      <span class="f">?</span> <span class="c">0</span> <span class="f">:</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkXzA_"><span class="b">__wait_event_interruptible_locked</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span><span class="f">)</span>
<a name="509" /><span class="Maybe">     509:</span> 
<a name="510" /><span class="Maybe">     510:</span> <span class="k">/**</span>
<a name="511" /><span class="Maybe">     511:</span> <span class="k"> * wait_event_interruptible_locked_irq - sleep until a condition gets true</span>
<a name="512" /><span class="Maybe">     512:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="513" /><span class="Maybe">     513:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="514" /><span class="Maybe">     514:</span> <span class="k"> *</span>
<a name="515" /><span class="Maybe">     515:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="516" /><span class="Maybe">     516:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="517" /><span class="Maybe">     517:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="518" /><span class="Maybe">     518:</span> <span class="k"> *</span>
<a name="519" /><span class="Maybe">     519:</span> <span class="k"> * It must be called with wq.lock being held.  This spinlock is</span>
<a name="520" /><span class="Maybe">     520:</span> <span class="k"> * unlocked while sleeping but @condition testing is done while lock</span>
<a name="521" /><span class="Maybe">     521:</span> <span class="k"> * is held and when this macro exits the lock is held.</span>
<a name="522" /><span class="Maybe">     522:</span> <span class="k"> *</span>
<a name="523" /><span class="Maybe">     523:</span> <span class="k"> * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq()</span>
<a name="524" /><span class="Maybe">     524:</span> <span class="k"> * functions which must match the way they are locked/unlocked outside</span>
<a name="525" /><span class="Maybe">     525:</span> <span class="k"> * of this macro.</span>
<a name="526" /><span class="Maybe">     526:</span> <span class="k"> *</span>
<a name="527" /><span class="Maybe">     527:</span> <span class="k"> * wake_up_locked() has to be called after changing any variable that could</span>
<a name="528" /><span class="Maybe">     528:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="529" /><span class="Maybe">     529:</span> <span class="k"> *</span>
<a name="530" /><span class="Maybe">     530:</span> <span class="k"> * The function will return -ERESTARTSYS if it was interrupted by a</span>
<a name="531" /><span class="Maybe">     531:</span> <span class="k"> * signal and 0 if @condition evaluated to true.</span>
<a name="532" /><span class="Maybe">     532:</span> <span class="k"> */</span>
<a name="533" /><span class="Maybe">     533:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tlZF9pcnFfMA__"><span class="b">wait_event_interruptible_locked_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>        \
<a name="534" /><span class="Maybe">     534:</span>     <span class="f">(</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="535" /><span class="Maybe">     535:</span>      <span class="f">?</span> <span class="c">0</span> <span class="f">:</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkXzA_"><span class="b">__wait_event_interruptible_locked</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">1</span><span class="f">)</span><span class="f">)</span>
<a name="536" /><span class="Maybe">     536:</span> 
<a name="537" /><span class="Maybe">     537:</span> <span class="k">/**</span>
<a name="538" /><span class="Maybe">     538:</span> <span class="k"> * wait_event_interruptible_exclusive_locked - sleep exclusively until a condition gets true</span>
<a name="539" /><span class="Maybe">     539:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="540" /><span class="Maybe">     540:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="541" /><span class="Maybe">     541:</span> <span class="k"> *</span>
<a name="542" /><span class="Maybe">     542:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="543" /><span class="Maybe">     543:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="544" /><span class="Maybe">     544:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="545" /><span class="Maybe">     545:</span> <span class="k"> *</span>
<a name="546" /><span class="Maybe">     546:</span> <span class="k"> * It must be called with wq.lock being held.  This spinlock is</span>
<a name="547" /><span class="Maybe">     547:</span> <span class="k"> * unlocked while sleeping but @condition testing is done while lock</span>
<a name="548" /><span class="Maybe">     548:</span> <span class="k"> * is held and when this macro exits the lock is held.</span>
<a name="549" /><span class="Maybe">     549:</span> <span class="k"> *</span>
<a name="550" /><span class="Maybe">     550:</span> <span class="k"> * The lock is locked/unlocked using spin_lock()/spin_unlock()</span>
<a name="551" /><span class="Maybe">     551:</span> <span class="k"> * functions which must match the way they are locked/unlocked outside</span>
<a name="552" /><span class="Maybe">     552:</span> <span class="k"> * of this macro.</span>
<a name="553" /><span class="Maybe">     553:</span> <span class="k"> *</span>
<a name="554" /><span class="Maybe">     554:</span> <span class="k"> * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag</span>
<a name="555" /><span class="Maybe">     555:</span> <span class="k"> * set thus when other process waits process on the list if this</span>
<a name="556" /><span class="Maybe">     556:</span> <span class="k"> * process is awaken further processes are not considered.</span>
<a name="557" /><span class="Maybe">     557:</span> <span class="k"> *</span>
<a name="558" /><span class="Maybe">     558:</span> <span class="k"> * wake_up_locked() has to be called after changing any variable that could</span>
<a name="559" /><span class="Maybe">     559:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="560" /><span class="Maybe">     560:</span> <span class="k"> *</span>
<a name="561" /><span class="Maybe">     561:</span> <span class="k"> * The function will return -ERESTARTSYS if it was interrupted by a</span>
<a name="562" /><span class="Maybe">     562:</span> <span class="k"> * signal and 0 if @condition evaluated to true.</span>
<a name="563" /><span class="Maybe">     563:</span> <span class="k"> */</span>
<a name="564" /><span class="Maybe">     564:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZV9sb2NrZWRfMA__"><span class="b">wait_event_interruptible_exclusive_locked</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>    \
<a name="565" /><span class="Maybe">     565:</span>     <span class="f">(</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="566" /><span class="Maybe">     566:</span>      <span class="f">?</span> <span class="c">0</span> <span class="f">:</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkXzA_"><span class="b">__wait_event_interruptible_locked</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span><span class="f">)</span>
<a name="567" /><span class="Maybe">     567:</span> 
<a name="568" /><span class="Maybe">     568:</span> <span class="k">/**</span>
<a name="569" /><span class="Maybe">     569:</span> <span class="k"> * wait_event_interruptible_exclusive_locked_irq - sleep until a condition gets true</span>
<a name="570" /><span class="Maybe">     570:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="571" /><span class="Maybe">     571:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="572" /><span class="Maybe">     572:</span> <span class="k"> *</span>
<a name="573" /><span class="Maybe">     573:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="574" /><span class="Maybe">     574:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="575" /><span class="Maybe">     575:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="576" /><span class="Maybe">     576:</span> <span class="k"> *</span>
<a name="577" /><span class="Maybe">     577:</span> <span class="k"> * It must be called with wq.lock being held.  This spinlock is</span>
<a name="578" /><span class="Maybe">     578:</span> <span class="k"> * unlocked while sleeping but @condition testing is done while lock</span>
<a name="579" /><span class="Maybe">     579:</span> <span class="k"> * is held and when this macro exits the lock is held.</span>
<a name="580" /><span class="Maybe">     580:</span> <span class="k"> *</span>
<a name="581" /><span class="Maybe">     581:</span> <span class="k"> * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq()</span>
<a name="582" /><span class="Maybe">     582:</span> <span class="k"> * functions which must match the way they are locked/unlocked outside</span>
<a name="583" /><span class="Maybe">     583:</span> <span class="k"> * of this macro.</span>
<a name="584" /><span class="Maybe">     584:</span> <span class="k"> *</span>
<a name="585" /><span class="Maybe">     585:</span> <span class="k"> * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag</span>
<a name="586" /><span class="Maybe">     586:</span> <span class="k"> * set thus when other process waits process on the list if this</span>
<a name="587" /><span class="Maybe">     587:</span> <span class="k"> * process is awaken further processes are not considered.</span>
<a name="588" /><span class="Maybe">     588:</span> <span class="k"> *</span>
<a name="589" /><span class="Maybe">     589:</span> <span class="k"> * wake_up_locked() has to be called after changing any variable that could</span>
<a name="590" /><span class="Maybe">     590:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="591" /><span class="Maybe">     591:</span> <span class="k"> *</span>
<a name="592" /><span class="Maybe">     592:</span> <span class="k"> * The function will return -ERESTARTSYS if it was interrupted by a</span>
<a name="593" /><span class="Maybe">     593:</span> <span class="k"> * signal and 0 if @condition evaluated to true.</span>
<a name="594" /><span class="Maybe">     594:</span> <span class="k"> */</span>
<a name="595" /><span class="Maybe">     595:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZV9sb2NrZWRfaXJxXzA_"><span class="b">wait_event_interruptible_exclusive_locked_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>    \
<a name="596" /><span class="Maybe">     596:</span>     <span class="f">(</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="597" /><span class="Maybe">     597:</span>      <span class="f">?</span> <span class="c">0</span> <span class="f">:</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkXzA_"><span class="b">__wait_event_interruptible_locked</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <span class="c">1</span><span class="f">)</span><span class="f">)</span>
<a name="598" /><span class="Maybe">     598:</span> 
<a name="599" /><span class="Maybe">     599:</span> 
<a name="600" /><span class="Maybe">     600:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2tpbGxhYmxlXzA_"><span class="b">__wait_event_killable</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>                \
<a name="601" /><span class="Maybe">     601:</span>     <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_VEFTS19LSUxMQUJMRV8w"><span class="b">TASK_KILLABLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">)</span>
<a name="602" /><span class="Maybe">     602:</span> 
<a name="603" /><span class="Maybe">     603:</span> <span class="k">/**</span>
<a name="604" /><span class="Maybe">     604:</span> <span class="k"> * wait_event_killable - sleep until a condition gets true</span>
<a name="605" /><span class="Maybe">     605:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="606" /><span class="Maybe">     606:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="607" /><span class="Maybe">     607:</span> <span class="k"> *</span>
<a name="608" /><span class="Maybe">     608:</span> <span class="k"> * The process is put to sleep (TASK_KILLABLE) until the</span>
<a name="609" /><span class="Maybe">     609:</span> <span class="k"> * @condition evaluates to true or a signal is received.</span>
<a name="610" /><span class="Maybe">     610:</span> <span class="k"> * The @condition is checked each time the waitqueue @wq is woken up.</span>
<a name="611" /><span class="Maybe">     611:</span> <span class="k"> *</span>
<a name="612" /><span class="Maybe">     612:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="613" /><span class="Maybe">     613:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="614" /><span class="Maybe">     614:</span> <span class="k"> *</span>
<a name="615" /><span class="Maybe">     615:</span> <span class="k"> * The function will return -ERESTARTSYS if it was interrupted by a</span>
<a name="616" /><span class="Maybe">     616:</span> <span class="k"> * signal and 0 if @condition evaluated to true.</span>
<a name="617" /><span class="Maybe">     617:</span> <span class="k"> */</span>
<a name="618" /><span class="Maybe">     618:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9raWxsYWJsZV8w"><span class="b">wait_event_killable</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span>                \
<a name="619" /><span class="Maybe">     619:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="620" /><span class="Maybe">     620:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="621" /><span class="Maybe">     621:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                        \
<a name="622" /><span class="Maybe">     622:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2tpbGxhYmxlXzA_"><span class="b">__wait_event_killable</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">)</span><span class="f">;</span>        \
<a name="623" /><span class="Maybe">     623:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="624" /><span class="Maybe">     624:</span> <span class="f">}</span><span class="f">)</span>
<a name="625" /><span class="Maybe">     625:</span> 
<a name="626" /><span class="Maybe">     626:</span> 
<a name="627" /><span class="Maybe">     627:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2xvY2tfaXJxXzA_"><span class="b">__wait_event_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="b">cmd</span><span class="f">)</span>            \
<a name="628" /><span class="Maybe">     628:</span>     <span class="f">(</span><span class="m">void</span><span class="f">)</span><a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19VTklOVEVSUlVQVElCTEVfMA__"><span class="b">TASK_UNINTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span>    \
<a name="629" /><span class="Maybe">     629:</span>                 <span class="b">spin_unlock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>            \
<a name="630" /><span class="Maybe">     630:</span>                 <span class="b">cmd</span><span class="f">;</span>                    \
<a name="631" /><span class="Maybe">     631:</span>                 <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="632" /><span class="Maybe">     632:</span>                 <span class="b">spin_lock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span>
<a name="633" /><span class="Maybe">     633:</span> 
<a name="634" /><span class="Maybe">     634:</span> <span class="k">/**</span>
<a name="635" /><span class="Maybe">     635:</span> <span class="k"> * wait_event_lock_irq_cmd - sleep until a condition gets true. The</span>
<a name="636" /><span class="Maybe">     636:</span> <span class="k"> *                 condition is checked under the lock. This</span>
<a name="637" /><span class="Maybe">     637:</span> <span class="k"> *                 is expected to be called with the lock</span>
<a name="638" /><span class="Maybe">     638:</span> <span class="k"> *                 taken.</span>
<a name="639" /><span class="Maybe">     639:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="640" /><span class="Maybe">     640:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="641" /><span class="Maybe">     641:</span> <span class="k"> * @lock: a locked spinlock_t, which will be released before cmd</span>
<a name="642" /><span class="Maybe">     642:</span> <span class="k"> *      and schedule() and reacquired afterwards.</span>
<a name="643" /><span class="Maybe">     643:</span> <span class="k"> * @cmd: a command which is invoked outside the critical section before</span>
<a name="644" /><span class="Maybe">     644:</span> <span class="k"> *     sleep</span>
<a name="645" /><span class="Maybe">     645:</span> <span class="k"> *</span>
<a name="646" /><span class="Maybe">     646:</span> <span class="k"> * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the</span>
<a name="647" /><span class="Maybe">     647:</span> <span class="k"> * @condition evaluates to true. The @condition is checked each time</span>
<a name="648" /><span class="Maybe">     648:</span> <span class="k"> * the waitqueue @wq is woken up.</span>
<a name="649" /><span class="Maybe">     649:</span> <span class="k"> *</span>
<a name="650" /><span class="Maybe">     650:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="651" /><span class="Maybe">     651:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="652" /><span class="Maybe">     652:</span> <span class="k"> *</span>
<a name="653" /><span class="Maybe">     653:</span> <span class="k"> * This is supposed to be called while holding the lock. The lock is</span>
<a name="654" /><span class="Maybe">     654:</span> <span class="k"> * dropped before invoking the cmd and going to sleep and is reacquired</span>
<a name="655" /><span class="Maybe">     655:</span> <span class="k"> * afterwards.</span>
<a name="656" /><span class="Maybe">     656:</span> <span class="k"> */</span>
<a name="657" /><span class="Maybe">     657:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9sb2NrX2lycV9jbWRfMA__"><span class="b">wait_event_lock_irq_cmd</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="b">cmd</span><span class="f">)</span>        \
<a name="658" /><span class="Maybe">     658:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="659" /><span class="Maybe">     659:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="660" /><span class="Maybe">     660:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="661" /><span class="Maybe">     661:</span>     <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2xvY2tfaXJxXzA_"><span class="b">__wait_event_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="b">cmd</span><span class="f">)</span><span class="f">;</span>        \
<a name="662" /><span class="Maybe">     662:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="663" /><span class="Maybe">     663:</span> 
<a name="664" /><span class="Maybe">     664:</span> <span class="k">/**</span>
<a name="665" /><span class="Maybe">     665:</span> <span class="k"> * wait_event_lock_irq - sleep until a condition gets true. The</span>
<a name="666" /><span class="Maybe">     666:</span> <span class="k"> *             condition is checked under the lock. This</span>
<a name="667" /><span class="Maybe">     667:</span> <span class="k"> *             is expected to be called with the lock</span>
<a name="668" /><span class="Maybe">     668:</span> <span class="k"> *             taken.</span>
<a name="669" /><span class="Maybe">     669:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="670" /><span class="Maybe">     670:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="671" /><span class="Maybe">     671:</span> <span class="k"> * @lock: a locked spinlock_t, which will be released before schedule()</span>
<a name="672" /><span class="Maybe">     672:</span> <span class="k"> *      and reacquired afterwards.</span>
<a name="673" /><span class="Maybe">     673:</span> <span class="k"> *</span>
<a name="674" /><span class="Maybe">     674:</span> <span class="k"> * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the</span>
<a name="675" /><span class="Maybe">     675:</span> <span class="k"> * @condition evaluates to true. The @condition is checked each time</span>
<a name="676" /><span class="Maybe">     676:</span> <span class="k"> * the waitqueue @wq is woken up.</span>
<a name="677" /><span class="Maybe">     677:</span> <span class="k"> *</span>
<a name="678" /><span class="Maybe">     678:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="679" /><span class="Maybe">     679:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="680" /><span class="Maybe">     680:</span> <span class="k"> *</span>
<a name="681" /><span class="Maybe">     681:</span> <span class="k"> * This is supposed to be called while holding the lock. The lock is</span>
<a name="682" /><span class="Maybe">     682:</span> <span class="k"> * dropped before going to sleep and is reacquired afterwards.</span>
<a name="683" /><span class="Maybe">     683:</span> <span class="k"> */</span>
<a name="684" /><span class="Maybe">     684:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9sb2NrX2lycV8w"><span class="b">wait_event_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">)</span>            \
<a name="685" /><span class="Maybe">     685:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="686" /><span class="Maybe">     686:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">condition</span><span class="f">)</span>                            \
<a name="687" /><span class="Maybe">     687:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="688" /><span class="Maybe">     688:</span>     <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2xvY2tfaXJxXzA_"><span class="b">__wait_event_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="f">)</span><span class="f">;</span>            \
<a name="689" /><span class="Maybe">     689:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="690" /><span class="Maybe">     690:</span> 
<a name="691" /><span class="Maybe">     691:</span> 
<a name="692" /><span class="Maybe">     692:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja19pcnFfMA__"><span class="b">__wait_event_interruptible_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="b">cmd</span><span class="f">)</span>    \
<a name="693" /><span class="Maybe">     693:</span>     <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span>        \
<a name="694" /><span class="Maybe">     694:</span>               <span class="b">spin_unlock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>                \
<a name="695" /><span class="Maybe">     695:</span>               <span class="b">cmd</span><span class="f">;</span>                        \
<a name="696" /><span class="Maybe">     696:</span>               <span class="b">schedule</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="697" /><span class="Maybe">     697:</span>               <span class="b">spin_lock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span>
<a name="698" /><span class="Maybe">     698:</span> 
<a name="699" /><span class="Maybe">     699:</span> <span class="k">/**</span>
<a name="700" /><span class="Maybe">     700:</span> <span class="k"> * wait_event_interruptible_lock_irq_cmd - sleep until a condition gets true.</span>
<a name="701" /><span class="Maybe">     701:</span> <span class="k"> *        The condition is checked under the lock. This is expected to</span>
<a name="702" /><span class="Maybe">     702:</span> <span class="k"> *        be called with the lock taken.</span>
<a name="703" /><span class="Maybe">     703:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="704" /><span class="Maybe">     704:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="705" /><span class="Maybe">     705:</span> <span class="k"> * @lock: a locked spinlock_t, which will be released before cmd and</span>
<a name="706" /><span class="Maybe">     706:</span> <span class="k"> *      schedule() and reacquired afterwards.</span>
<a name="707" /><span class="Maybe">     707:</span> <span class="k"> * @cmd: a command which is invoked outside the critical section before</span>
<a name="708" /><span class="Maybe">     708:</span> <span class="k"> *     sleep</span>
<a name="709" /><span class="Maybe">     709:</span> <span class="k"> *</span>
<a name="710" /><span class="Maybe">     710:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="711" /><span class="Maybe">     711:</span> <span class="k"> * @condition evaluates to true or a signal is received. The @condition is</span>
<a name="712" /><span class="Maybe">     712:</span> <span class="k"> * checked each time the waitqueue @wq is woken up.</span>
<a name="713" /><span class="Maybe">     713:</span> <span class="k"> *</span>
<a name="714" /><span class="Maybe">     714:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="715" /><span class="Maybe">     715:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="716" /><span class="Maybe">     716:</span> <span class="k"> *</span>
<a name="717" /><span class="Maybe">     717:</span> <span class="k"> * This is supposed to be called while holding the lock. The lock is</span>
<a name="718" /><span class="Maybe">     718:</span> <span class="k"> * dropped before invoking the cmd and going to sleep and is reacquired</span>
<a name="719" /><span class="Maybe">     719:</span> <span class="k"> * afterwards.</span>
<a name="720" /><span class="Maybe">     720:</span> <span class="k"> *</span>
<a name="721" /><span class="Maybe">     721:</span> <span class="k"> * The macro will return -ERESTARTSYS if it was interrupted by a signal</span>
<a name="722" /><span class="Maybe">     722:</span> <span class="k"> * and 0 if @condition evaluated to true.</span>
<a name="723" /><span class="Maybe">     723:</span> <span class="k"> */</span>
<a name="724" /><span class="Maybe">     724:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tfaXJxX2NtZF8w"><span class="b">wait_event_interruptible_lock_irq_cmd</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="b">cmd</span><span class="f">)</span>    \
<a name="725" /><span class="Maybe">     725:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="726" /><span class="Maybe">     726:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="727" /><span class="Maybe">     727:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                        \
<a name="728" /><span class="Maybe">     728:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja19pcnFfMA__"><span class="b">__wait_event_interruptible_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span>        \
<a name="729" /><span class="Maybe">     729:</span>                         <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="b">cmd</span><span class="f">)</span><span class="f">;</span>    \
<a name="730" /><span class="Maybe">     730:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="731" /><span class="Maybe">     731:</span> <span class="f">}</span><span class="f">)</span>
<a name="732" /><span class="Maybe">     732:</span> 
<a name="733" /><span class="Maybe">     733:</span> <span class="k">/**</span>
<a name="734" /><span class="Maybe">     734:</span> <span class="k"> * wait_event_interruptible_lock_irq - sleep until a condition gets true.</span>
<a name="735" /><span class="Maybe">     735:</span> <span class="k"> *        The condition is checked under the lock. This is expected</span>
<a name="736" /><span class="Maybe">     736:</span> <span class="k"> *        to be called with the lock taken.</span>
<a name="737" /><span class="Maybe">     737:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="738" /><span class="Maybe">     738:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="739" /><span class="Maybe">     739:</span> <span class="k"> * @lock: a locked spinlock_t, which will be released before schedule()</span>
<a name="740" /><span class="Maybe">     740:</span> <span class="k"> *      and reacquired afterwards.</span>
<a name="741" /><span class="Maybe">     741:</span> <span class="k"> *</span>
<a name="742" /><span class="Maybe">     742:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="743" /><span class="Maybe">     743:</span> <span class="k"> * @condition evaluates to true or signal is received. The @condition is</span>
<a name="744" /><span class="Maybe">     744:</span> <span class="k"> * checked each time the waitqueue @wq is woken up.</span>
<a name="745" /><span class="Maybe">     745:</span> <span class="k"> *</span>
<a name="746" /><span class="Maybe">     746:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="747" /><span class="Maybe">     747:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="748" /><span class="Maybe">     748:</span> <span class="k"> *</span>
<a name="749" /><span class="Maybe">     749:</span> <span class="k"> * This is supposed to be called while holding the lock. The lock is</span>
<a name="750" /><span class="Maybe">     750:</span> <span class="k"> * dropped before going to sleep and is reacquired afterwards.</span>
<a name="751" /><span class="Maybe">     751:</span> <span class="k"> *</span>
<a name="752" /><span class="Maybe">     752:</span> <span class="k"> * The macro will return -ERESTARTSYS if it was interrupted by a signal</span>
<a name="753" /><span class="Maybe">     753:</span> <span class="k"> * and 0 if @condition evaluated to true.</span>
<a name="754" /><span class="Maybe">     754:</span> <span class="k"> */</span>
<a name="755" /><span class="Maybe">     755:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tfaXJxXzA_"><span class="b">wait_event_interruptible_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">)</span>        \
<a name="756" /><span class="Maybe">     756:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="757" /><span class="Maybe">     757:</span>     <span class="m">int</span> <span class="b">__ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                            \
<a name="758" /><span class="Maybe">     758:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                        \
<a name="759" /><span class="Maybe">     759:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja19pcnFfMA__"><span class="b">__wait_event_interruptible_lock_irq</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span>        \
<a name="760" /><span class="Maybe">     760:</span>                         <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span><span class="f">)</span><span class="f">;</span>    \
<a name="761" /><span class="Maybe">     761:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="762" /><span class="Maybe">     762:</span> <span class="f">}</span><span class="f">)</span>
<a name="763" /><span class="Maybe">     763:</span> 
<a name="764" /><span class="Maybe">     764:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja19pcnFfdGltZW91dF8w"><span class="b">__wait_event_interruptible_lock_irq_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span>    \
<a name="765" /><span class="Maybe">     765:</span>                             <span class="b">lock</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span>    \
<a name="766" /><span class="Maybe">     766:</span>     <a href="cpu.c_macros_noref.html#_X19fd2FpdF9ldmVudF8w"><span class="b">___wait_event</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_X19fd2FpdF9jb25kX3RpbWVvdXRfMA__"><span class="b">___wait_cond_timeout</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">,</span>        \
<a name="767" /><span class="Maybe">     767:</span>               <a href="cpu.c_macros_ref.html#_VEFTS19JTlRFUlJVUFRJQkxFXzA_"><span class="b">TASK_INTERRUPTIBLE</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="b">timeout</span><span class="f">,</span>            \
<a name="768" /><span class="Maybe">     768:</span>               <span class="b">spin_unlock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>                \
<a name="769" /><span class="Maybe">     769:</span>               <span class="b">__ret</span> <span class="f">=</span> <span class="b">schedule_timeout</span><span class="f">(</span><span class="b">__ret</span><span class="f">)</span><span class="f">;</span>            \
<a name="770" /><span class="Maybe">     770:</span>               <span class="b">spin_lock_irq</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="771" /><span class="Maybe">     771:</span> 
<a name="772" /><span class="Maybe">     772:</span> <span class="k">/**</span>
<a name="773" /><span class="Maybe">     773:</span> <span class="k"> * wait_event_interruptible_lock_irq_timeout - sleep until a condition gets</span>
<a name="774" /><span class="Maybe">     774:</span> <span class="k"> *        true or a timeout elapses. The condition is checked under</span>
<a name="775" /><span class="Maybe">     775:</span> <span class="k"> *        the lock. This is expected to be called with the lock taken.</span>
<a name="776" /><span class="Maybe">     776:</span> <span class="k"> * @wq: the waitqueue to wait on</span>
<a name="777" /><span class="Maybe">     777:</span> <span class="k"> * @condition: a C expression for the event to wait for</span>
<a name="778" /><span class="Maybe">     778:</span> <span class="k"> * @lock: a locked spinlock_t, which will be released before schedule()</span>
<a name="779" /><span class="Maybe">     779:</span> <span class="k"> *      and reacquired afterwards.</span>
<a name="780" /><span class="Maybe">     780:</span> <span class="k"> * @timeout: timeout, in jiffies</span>
<a name="781" /><span class="Maybe">     781:</span> <span class="k"> *</span>
<a name="782" /><span class="Maybe">     782:</span> <span class="k"> * The process is put to sleep (TASK_INTERRUPTIBLE) until the</span>
<a name="783" /><span class="Maybe">     783:</span> <span class="k"> * @condition evaluates to true or signal is received. The @condition is</span>
<a name="784" /><span class="Maybe">     784:</span> <span class="k"> * checked each time the waitqueue @wq is woken up.</span>
<a name="785" /><span class="Maybe">     785:</span> <span class="k"> *</span>
<a name="786" /><span class="Maybe">     786:</span> <span class="k"> * wake_up() has to be called after changing any variable that could</span>
<a name="787" /><span class="Maybe">     787:</span> <span class="k"> * change the result of the wait condition.</span>
<a name="788" /><span class="Maybe">     788:</span> <span class="k"> *</span>
<a name="789" /><span class="Maybe">     789:</span> <span class="k"> * This is supposed to be called while holding the lock. The lock is</span>
<a name="790" /><span class="Maybe">     790:</span> <span class="k"> * dropped before going to sleep and is reacquired afterwards.</span>
<a name="791" /><span class="Maybe">     791:</span> <span class="k"> *</span>
<a name="792" /><span class="Maybe">     792:</span> <span class="k"> * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it</span>
<a name="793" /><span class="Maybe">     793:</span> <span class="k"> * was interrupted by a signal, and the remaining jiffies otherwise</span>
<a name="794" /><span class="Maybe">     794:</span> <span class="k"> * if the condition evaluated to true before the timeout elapsed.</span>
<a name="795" /><span class="Maybe">     795:</span> <span class="k"> */</span>
<a name="796" /><span class="Maybe">     796:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tfaXJxX3RpbWVvdXRfMA__"><span class="b">wait_event_interruptible_lock_irq_timeout</span></a><span class="f">(</span><span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span>    \
<a name="797" /><span class="Maybe">     797:</span>                           <span class="b">timeout</span><span class="f">)</span>        \
<a name="798" /><span class="Maybe">     798:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="799" /><span class="Maybe">     799:</span>     <span class="m">long</span> <span class="b">__ret</span> <span class="f">=</span> <span class="b">timeout</span><span class="f">;</span>                        \
<a name="800" /><span class="Maybe">     800:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_noref.html#_X19fd2FpdF9jb25kX3RpbWVvdXRfMA__"><span class="b">___wait_cond_timeout</span></a><span class="f">(</span><span class="b">condition</span><span class="f">)</span><span class="f">)</span>                \
<a name="801" /><span class="Maybe">     801:</span>         <span class="b">__ret</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja19pcnFfdGltZW91dF8w"><span class="b">__wait_event_interruptible_lock_irq_timeout</span></a><span class="f">(</span>    \
<a name="802" /><span class="Maybe">     802:</span>                     <span class="b">wq</span><span class="f">,</span> <span class="b">condition</span><span class="f">,</span> <span class="b">lock</span><span class="f">,</span> <span class="b">timeout</span><span class="f">)</span><span class="f">;</span>    \
<a name="803" /><span class="Maybe">     803:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="804" /><span class="Maybe">     804:</span> <span class="f">}</span><span class="f">)</span>
<a name="805" /><span class="Maybe">     805:</span> 
<a name="806" /><span class="Maybe">     806:</span> 
<a name="807" /><span class="Maybe">     807:</span> <span class="k">/*</span>
<a name="808" /><span class="Maybe">     808:</span> <span class="k"> * These are the old interfaces to sleep waiting for an event.</span>
<a name="809" /><span class="Maybe">     809:</span> <span class="k"> * They are racy.  DO NOT use them, use the wait_event* interfaces above.</span>
<a name="810" /><span class="Maybe">     810:</span> <span class="k"> * We plan to remove these interfaces.</span>
<a name="811" /><span class="Maybe">     811:</span> <span class="k"> */</span>
<a name="812" /><span class="Maybe">     812:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">sleep_on</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">)</span><span class="f">;</span>
<a name="813" /><span class="Maybe">     813:</span> <span class="m">extern</span> <span class="m">long</span> <span class="b">sleep_on_timeout</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">signed</span> <span class="m">long</span> <span class="b">timeout</span><span class="f">)</span><span class="f">;</span>
<a name="814" /><span class="Maybe">     814:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">interruptible_sleep_on</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">)</span><span class="f">;</span>
<a name="815" /><span class="Maybe">     815:</span> <span class="m">extern</span> <span class="m">long</span> <span class="b">interruptible_sleep_on_timeout</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="m">signed</span> <span class="m">long</span> <span class="b">timeout</span><span class="f">)</span><span class="f">;</span>
<a name="816" /><span class="Maybe">     816:</span> 
<a name="817" /><span class="Maybe">     817:</span> <span class="k">/*</span>
<a name="818" /><span class="Maybe">     818:</span> <span class="k"> * Waitqueues which are removed from the waitqueue_head at wakeup time</span>
<a name="819" /><span class="Maybe">     819:</span> <span class="k"> */</span>
<a name="820" /><span class="Maybe">     820:</span> <span class="m">void</span> <span class="b">prepare_to_wait</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">int</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="821" /><span class="Maybe">     821:</span> <span class="m">void</span> <span class="b">prepare_to_wait_exclusive</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">int</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="822" /><span class="Maybe">     822:</span> <span class="m">long</span> <span class="b">prepare_to_wait_event</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">int</span> <span class="b">state</span><span class="f">)</span><span class="f">;</span>
<a name="823" /><span class="Maybe">     823:</span> <span class="m">void</span> <span class="b">finish_wait</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="824" /><span class="Maybe">     824:</span> <span class="m">void</span> <span class="b">abort_exclusive_wait</span><span class="f">(</span><span class="b">wait_queue_head_t</span> <span class="f">*</span><span class="b">q</span><span class="f">,</span> <span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">mode</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="825" /><span class="Maybe">     825:</span> <span class="m">int</span> <span class="b">autoremove_wake_function</span><span class="f">(</span><span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">unsigned</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">sync</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="826" /><span class="Maybe">     826:</span> <span class="m">int</span> <span class="b">wake_bit_function</span><span class="f">(</span><span class="b">wait_queue_t</span> <span class="f">*</span><span class="b">wait</span><span class="f">,</span> <span class="m">unsigned</span> <span class="b">mode</span><span class="f">,</span> <span class="m">int</span> <span class="b">sync</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="827" /><span class="Maybe">     827:</span> 
<a name="828" /><span class="Maybe">     828:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1dBSVRfRlVOQ18w"><span class="b">DEFINE_WAIT_FUNC</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">function</span><span class="f">)</span>                \
<a name="829" /><span class="Maybe">     829:</span>     <span class="b">wait_queue_t</span> <span class="b">name</span> <span class="f">=</span> <span class="f">{</span>                        \
<a name="830" /><span class="Maybe">     830:</span>         <span class="f">.</span><span class="m">private</span>    <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">,</span>                \
<a name="831" /><span class="Maybe">     831:</span>         <span class="f">.</span><span class="b">func</span>        <span class="f">=</span> <span class="b">function</span><span class="f">,</span>                \
<a name="832" /><span class="Maybe">     832:</span>         <span class="f">.</span><span class="b">task_list</span>    <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9IRUFEX0lOSVRfMA__"><span class="b">LIST_HEAD_INIT</span></a><span class="f">(</span><span class="f">(</span><span class="b">name</span><span class="f">)</span><span class="f">.</span><span class="b">task_list</span><span class="f">)</span><span class="f">,</span>    \
<a name="833" /><span class="Maybe">     833:</span>     <span class="f">}</span>
<a name="834" /><span class="Maybe">     834:</span> 
<a name="835" /><span class="Maybe">     835:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1dBSVRfMA__"><span class="b">DEFINE_WAIT</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1dBSVRfRlVOQ18w"><span class="b">DEFINE_WAIT_FUNC</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">autoremove_wake_function</span><span class="f">)</span>
<a name="836" /><span class="Maybe">     836:</span> 
<a name="837" /><span class="Maybe">     837:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1dBSVRfQklUXzA_"><span class="b">DEFINE_WAIT_BIT</span></a><span class="f">(</span><span class="b">name</span><span class="f">,</span> <span class="b">word</span><span class="f">,</span> <span class="b">bit</span><span class="f">)</span>                \
<a name="838" /><span class="Maybe">     838:</span>     <span class="m">struct</span> <span class="b">wait_bit_queue</span> <span class="b">name</span> <span class="f">=</span> <span class="f">{</span>                    \
<a name="839" /><span class="Maybe">     839:</span>         <span class="f">.</span><span class="b">key</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X19XQUlUX0JJVF9LRVlfSU5JVElBTElaRVJfMA__"><span class="b">__WAIT_BIT_KEY_INITIALIZER</span></a><span class="f">(</span><span class="b">word</span><span class="f">,</span> <span class="b">bit</span><span class="f">)</span><span class="f">,</span>        \
<a name="840" /><span class="Maybe">     840:</span>         <span class="f">.</span><span class="b">wait</span>    <span class="f">=</span> <span class="f">{</span>                        \
<a name="841" /><span class="Maybe">     841:</span>             <span class="f">.</span><span class="m">private</span>    <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">,</span>            \
<a name="842" /><span class="Maybe">     842:</span>             <span class="f">.</span><span class="b">func</span>        <span class="f">=</span> <span class="b">wake_bit_function</span><span class="f">,</span>        \
<a name="843" /><span class="Maybe">     843:</span>             <span class="f">.</span><span class="b">task_list</span>    <span class="f">=</span>                \
<a name="844" /><span class="Maybe">     844:</span>                 <a href="cpu.c_macros_ref.html#_TElTVF9IRUFEX0lOSVRfMA__"><span class="b">LIST_HEAD_INIT</span></a><span class="f">(</span><span class="f">(</span><span class="b">name</span><span class="f">)</span><span class="f">.</span><span class="b">wait</span><span class="f">.</span><span class="b">task_list</span><span class="f">)</span><span class="f">,</span>    \
<a name="845" /><span class="Maybe">     845:</span>         <span class="f">}</span><span class="f">,</span>                            \
<a name="846" /><span class="Maybe">     846:</span>     <span class="f">}</span>
<a name="847" /><span class="Maybe">     847:</span> 
<a name="848" /><span class="Maybe">     848:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aW5pdF93YWl0XzA_"><span class="b">init_wait</span></a><span class="f">(</span><span class="b">wait</span><span class="f">)</span>                            \
<a name="849" /><span class="Maybe">     849:</span>     <span class="m">do</span> <span class="f">{</span>                                \
<a name="850" /><span class="Maybe">     850:</span>         <span class="f">(</span><span class="b">wait</span><span class="f">)</span><span class="f">-&gt;</span><span class="m">private</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">;</span>                \
<a name="851" /><span class="Maybe">     851:</span>         <span class="f">(</span><span class="b">wait</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">func</span> <span class="f">=</span> <span class="b">autoremove_wake_function</span><span class="f">;</span>        \
<a name="852" /><span class="Maybe">     852:</span>         <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">wait</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">task_list</span><span class="f">)</span><span class="f">;</span>            \
<a name="853" /><span class="Maybe">     853:</span>         <span class="f">(</span><span class="b">wait</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">flags</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>                    \
<a name="854" /><span class="Maybe">     854:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="855" /><span class="Maybe">     855:</span> 
<a name="856" /><span class="Maybe">     856:</span> <span class="k">/**</span>
<a name="857" /><span class="Maybe">     857:</span> <span class="k"> * wait_on_bit - wait for a bit to be cleared</span>
<a name="858" /><span class="Maybe">     858:</span> <span class="k"> * @word: the word being waited on, a kernel virtual address</span>
<a name="859" /><span class="Maybe">     859:</span> <span class="k"> * @bit: the bit of the word being waited on</span>
<a name="860" /><span class="Maybe">     860:</span> <span class="k"> * @action: the function used to sleep, which may take special actions</span>
<a name="861" /><span class="Maybe">     861:</span> <span class="k"> * @mode: the task state to sleep in</span>
<a name="862" /><span class="Maybe">     862:</span> <span class="k"> *</span>
<a name="863" /><span class="Maybe">     863:</span> <span class="k"> * There is a standard hashed waitqueue table for generic use. This</span>
<a name="864" /><span class="Maybe">     864:</span> <span class="k"> * is the part of the hashtable&apos;s accessor API that waits on a bit.</span>
<a name="865" /><span class="Maybe">     865:</span> <span class="k"> * For instance, if one were to have waiters on a bitflag, one would</span>
<a name="866" /><span class="Maybe">     866:</span> <span class="k"> * call wait_on_bit() in threads waiting for the bit to clear.</span>
<a name="867" /><span class="Maybe">     867:</span> <span class="k"> * One uses wait_on_bit() where one is waiting for the bit to clear,</span>
<a name="868" /><span class="Maybe">     868:</span> <span class="k"> * but has no intention of setting it.</span>
<a name="869" /><span class="Maybe">     869:</span> <span class="k"> */</span>
<a name="870" /><span class="Maybe">     870:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span>
<a name="871" /><span class="Maybe">     871:</span> <span class="b">wait_on_bit</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">word</span><span class="f">,</span> <span class="m">int</span> <span class="b">bit</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">action</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span> <span class="b">mode</span><span class="f">)</span>
<a name="872" /><span class="Maybe">     872:</span> <span class="f">{</span>
<a name="873" /><span class="Maybe">     873:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_ref.html#_dGVzdF9iaXRfMA__"><span class="b">test_bit</span></a><span class="f">(</span><span class="b">bit</span><span class="f">,</span> <span class="b">word</span><span class="f">)</span><span class="f">)</span>
<a name="874" /><span class="Maybe">     874:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="875" /><span class="Maybe">     875:</span>     <span class="m">return</span> <span class="b">out_of_line_wait_on_bit</span><span class="f">(</span><span class="b">word</span><span class="f">,</span> <span class="b">bit</span><span class="f">,</span> <span class="b">action</span><span class="f">,</span> <span class="b">mode</span><span class="f">)</span><span class="f">;</span>
<a name="876" /><span class="Maybe">     876:</span> <span class="f">}</span>
<a name="877" /><span class="Maybe">     877:</span> 
<a name="878" /><span class="Maybe">     878:</span> <span class="k">/**</span>
<a name="879" /><span class="Maybe">     879:</span> <span class="k"> * wait_on_bit_lock - wait for a bit to be cleared, when wanting to set it</span>
<a name="880" /><span class="Maybe">     880:</span> <span class="k"> * @word: the word being waited on, a kernel virtual address</span>
<a name="881" /><span class="Maybe">     881:</span> <span class="k"> * @bit: the bit of the word being waited on</span>
<a name="882" /><span class="Maybe">     882:</span> <span class="k"> * @action: the function used to sleep, which may take special actions</span>
<a name="883" /><span class="Maybe">     883:</span> <span class="k"> * @mode: the task state to sleep in</span>
<a name="884" /><span class="Maybe">     884:</span> <span class="k"> *</span>
<a name="885" /><span class="Maybe">     885:</span> <span class="k"> * There is a standard hashed waitqueue table for generic use. This</span>
<a name="886" /><span class="Maybe">     886:</span> <span class="k"> * is the part of the hashtable&apos;s accessor API that waits on a bit</span>
<a name="887" /><span class="Maybe">     887:</span> <span class="k"> * when one intends to set it, for instance, trying to lock bitflags.</span>
<a name="888" /><span class="Maybe">     888:</span> <span class="k"> * For instance, if one were to have waiters trying to set bitflag</span>
<a name="889" /><span class="Maybe">     889:</span> <span class="k"> * and waiting for it to clear before setting it, one would call</span>
<a name="890" /><span class="Maybe">     890:</span> <span class="k"> * wait_on_bit() in threads waiting to be able to set the bit.</span>
<a name="891" /><span class="Maybe">     891:</span> <span class="k"> * One uses wait_on_bit_lock() where one is waiting for the bit to</span>
<a name="892" /><span class="Maybe">     892:</span> <span class="k"> * clear with the intention of setting it, and when done, clearing it.</span>
<a name="893" /><span class="Maybe">     893:</span> <span class="k"> */</span>
<a name="894" /><span class="Maybe">     894:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span>
<a name="895" /><span class="Maybe">     895:</span> <span class="b">wait_on_bit_lock</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">word</span><span class="f">,</span> <span class="m">int</span> <span class="b">bit</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">action</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span> <span class="b">mode</span><span class="f">)</span>
<a name="896" /><span class="Maybe">     896:</span> <span class="f">{</span>
<a name="897" /><span class="Maybe">     897:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">test_and_set_bit</span><span class="f">(</span><span class="b">bit</span><span class="f">,</span> <span class="b">word</span><span class="f">)</span><span class="f">)</span>
<a name="898" /><span class="Maybe">     898:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="899" /><span class="Maybe">     899:</span>     <span class="m">return</span> <span class="b">out_of_line_wait_on_bit_lock</span><span class="f">(</span><span class="b">word</span><span class="f">,</span> <span class="b">bit</span><span class="f">,</span> <span class="b">action</span><span class="f">,</span> <span class="b">mode</span><span class="f">)</span><span class="f">;</span>
<a name="900" /><span class="Maybe">     900:</span> <span class="f">}</span>
<a name="901" /><span class="Maybe">     901:</span> 
<a name="902" /><span class="Maybe">     902:</span> <span class="k">/**</span>
<a name="903" /><span class="Maybe">     903:</span> <span class="k"> * wait_on_atomic_t - Wait for an atomic_t to become 0</span>
<a name="904" /><span class="Maybe">     904:</span> <span class="k"> * @val: The atomic value being waited on, a kernel virtual address</span>
<a name="905" /><span class="Maybe">     905:</span> <span class="k"> * @action: the function used to sleep, which may take special actions</span>
<a name="906" /><span class="Maybe">     906:</span> <span class="k"> * @mode: the task state to sleep in</span>
<a name="907" /><span class="Maybe">     907:</span> <span class="k"> *</span>
<a name="908" /><span class="Maybe">     908:</span> <span class="k"> * Wait for an atomic_t to become 0.  We abuse the bit-wait waitqueue table for</span>
<a name="909" /><span class="Maybe">     909:</span> <span class="k"> * the purpose of getting a waitqueue, but we set the key to a bit number</span>
<a name="910" /><span class="Maybe">     910:</span> <span class="k"> * outside of the target &apos;word&apos;.</span>
<a name="911" /><span class="Maybe">     911:</span> <span class="k"> */</span>
<a name="912" /><span class="Maybe">     912:</span> <span class="m">static</span> <span class="m">inline</span>
<a name="913" /><span class="Maybe">     913:</span> <span class="m">int</span> <span class="b">wait_on_atomic_t</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="b">val</span><span class="f">,</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">action</span><span class="f">)</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span> <span class="m">unsigned</span> <span class="b">mode</span><span class="f">)</span>
<a name="914" /><span class="Maybe">     914:</span> <span class="f">{</span>
<a name="915" /><span class="Maybe">     915:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">atomic_read</span><span class="f">(</span><span class="b">val</span><span class="f">)</span> <span class="f">==</span> <span class="c">0</span><span class="f">)</span>
<a name="916" /><span class="Maybe">     916:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="917" /><span class="Maybe">     917:</span>     <span class="m">return</span> <span class="b">out_of_line_wait_on_atomic_t</span><span class="f">(</span><span class="b">val</span><span class="f">,</span> <span class="b">action</span><span class="f">,</span> <span class="b">mode</span><span class="f">)</span><span class="f">;</span>
<a name="918" /><span class="Maybe">     918:</span> <span class="f">}</span>
<a name="919" /><span class="Maybe">     919:</span> 
<a name="920" /><span class="True">     920:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_WAIT_H */</span>
<a name="921" /><span class="True">     921:</span> </pre>
  </body>
</html>
